4

비슷한 응용 프로그램이 두 개 있습니다 (무료, 유료 중 하나). 나는이 무료 응용 프로그램에서 적절한 암시 적 목적으로 startActivity를 호출 할 때내 보낸 활동이 활동 선택기에 나열되었습니다.

액티비티가 exported="false"

<activity 
     android:name=".MyActivity" 
     android:exported="false" 
     android:noHistory="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="vnd.android.cursor.item/vnd.mine" /> 
     </intent-filter> 
    </activity> 

으로 정의, 활동 선택기가 나타납니다. 유료 응용 프로그램에서 활동이 나타납니다 왜 내가이 URL을 기반으로 텐트 필터를 추가 할 수 있습니다 가정 exported="false"

이지만, 내 질문이기 때문에

나는, 이해가 안 다음에서 활동을 수행하는 이유 사이먼이 활동이 다른 응용 프로그램의 구성 요소에 의해 발사 될 수 있는지 여부를

을 읽을 때 다른 응용 프로그램은

답변

5

내가 아래에 안 나타납니다

일치하는 <intent-filter>이 (가) 있기 때문에 유료 앱의 활동이 표시되는 이유를 설명하십시오. 내보낼 수없는 활동에 <intent-filter>이 필요하지 않으므로이 활동을 시작할 때 명시 적으로 삭제하고 Intent을 사용하십시오.

는 왜 문서를 읽을 때 다른 응용 프로그램에서 활동

I had the same question ... 나타나지 않는이 행동을 예상하고 버그가 쓸모없는 <intent-filter>있는을위한 우리의 응용 프로그램에 들었다. 인용구 : Dianne Hackborn :

일반적으로이 앱의 버그라고 생각합니다. 다른 앱을 시작할 수없는 활동이있는 경우 왜 그런 의도의 필터를 게시하고 있습니까? 시작하려고 일치합니까? 액티비티의 보안 (익스포트되지 않거나 허가가 필요한지 여부)은 의도 매칭의 일부가 아닙니다. ...이 시나리오 (다른 응용 프로그램이 사용할 인 텐트와 일치하는 활동 게시하지만 다른 응용 프로그램에서 실행할 수 없도록 제한)는 크게 손상되지 않으면 유용하지 않습니다.

+0

나는 정말 행복하지는 않지만 훌륭한 답변을드립니다. 나는이 소중한 Dianne Hackborn에게 대답 할 수 있습니다 : 나는 라이브러리 프로젝트의 코드를 generic으로 만들고 싶습니다. 그것은'AbstractActivity'를 정의합니다; 무료 앱은 '.MyActivity'를 정의하고 액티비티'.MyProActivty'를 지불하며 둘 다 동일한 인 텐트 필터를 사용합니다. 상속을 할 수없는 경우 일반적으로 프레임 워크의 버그를 고려할 것입니다. – rds

+0

해결 방법 : 클래스 또는 명시 적 인 텐트를 반환하는 추상 클래스에 메서드가 있어야합니다. (내 특별한 경우에, 나는 정말로 그것을하고 싶지 않다.) – rds

+0

@rds : "라이브러리 프로젝트의 코드를 일반화하고 싶다."- 그것은 실제로 의 역할이 아니다. 수출 된 활동으로 그런 식으로 사용할 수는 있지만 원래의 목적은 아닙니다. OS 및 제 3 자에게 귀하가 기꺼이 사용할 수있게 해주는 기능성 광고입니다. – CommonsWare

관련 문제