2012-06-04 4 views

답변

22

다른 앱을 설치하기 전에이 broadcastReceiver가 포함 된 앱을 실행 했습니까?

일부 API 버전부터는 앱을 실행할 때까지는 BroadcastReceivers가 작동하지 않습니다. 활동을 시작하고 실행하십시오.

또한, 브로드 캐스트 리시버에 다음을 추가하는 것을 잊지 마세요 :

<data android:scheme="package" /> 

편집이 : 안드로이드 8에서 앱 목표 API 27 이상, 그것은 부분적으로 작동하는지, 그래서 당신은 매니 페스트가 아닌 코드로 이벤트에 등록해야합니다. 다음은 매니페스트에서 여전히 안전하게 사용할 수있는 인 텐트 목록입니다 : https://developer.android.com/guide/components/broadcast-exceptions.html.

나머지는 코드에서 사용해야합니다. 추가 정보 here

+3

감사합니다. intent-filter에 를 추가하면 작동합니다! – arts777

+0

도움이 되니 기쁩니다. –

+0

@android 개발자, 감사합니다하지만 DDMS보기에서 응용 프로그램을 제거하는 동안 PACKAGE_REMOVED 문제가 남아 있습니다. 어떤 제안이 있습니까 – ArK

5

설치하려는 응용 프로그램에서 인 텐트를 받으려고합니까? The documentation for ACTION_PACKAGE_ADDED 메시지 :

새로 설치된 패키지는이 브로드 캐스트를 수신하지 않습니다.

또 다른 가능성은이 인 텐트가 매니페스트를 통해 등록 된 구성 요소에는 전달되지 않지만 수동으로 만 전달된다는 것입니다 (an answer by Mark Murphy to Stack Overflow question Can't receive broadcasts for PACKAGE intents에서 설명).

+0

이 의도를 수신하려고하면 수신자가있는 앱이 시작됩니다. – arts777

+0

이는 대부분의 오류에서 중요한 부분입니다. 감사. – trante

8

android.intent.action.PACKAGE_ADDED은 시스템 의도입니다 (설치시 자신의 앱이 수신하지 않음에 유의하십시오). BroadcastReceiver은 앱 외부 소스로부터 메시지를 수신합니다. 따라서, 당신은 넣어하지 않았다 확인 : 안드로이드 : 그래서

<data android:scheme="package" /> 

, 당신의 BroadcastReceiver 당신의 AndroidManifest.xml에 다음과 같아야합니다 :

또한 추가해야 = "false"를 수출

<application ...> 
    <receiver android:name=".NewAppReceiver" android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 
</appcication> 

가 여전히 작동하지 않으면, 당신은 등의 높은 우선 순위를 넣어 시도 할 수 있습니다 : 안드로이드 : 우선 순위 = "1000" 0 당신이 일을해야 다른 패키지를 수신하려고하면 http://developer.android.com/guide/topics/manifest/receiver-element.html

+0

문서에서 언급했듯이 최대 우선 순위는 999 일 수 있습니다. https://developer.android.com/guide/topics/manifest/intent-filter-element.html – Sagar

+0

어떤 이유로 든 여전히 작동하지 않습니다. 내 의도 필터에 여러 가지 작업이 있습니다. 그 중에서도 PACKAGE_FULLY_REMOVED가 수신자의 onCreate를 제대로 트리거하지만 PACKAGE_ADDED는 단순히 수신하지 않습니다. 내 앱이 이미 실행 중 상태이고, 리시버에 대해 "true"를 내 보낸 경우 최대 우선 순위를 999로 설정하고 제안에 따라 를 포함 시켰습니다. 내가 여기서 뭔가를 놓치고 있니? – Sagar

0

: 은 한 번보세요.

(@Savvas에 명시된 바와 같이) 나만의 패키지 추가를 받으려고하면받을 수 없습니다.방송 수신자가 action.PACKAGE_ADDED 인 경우에도 수신자의 onReceive 방법은 isn't triggered입니다.

이 경우 가장 좋은 방법은이 데이터를 저장하는 것입니다. sharedPreferences을 사용하여 "appIsWorkedBefore"와 같은 키를 추가하고 실행 프로그램의 onCreate 메소드에서이 변수를 "true"로 설정하십시오. 그리고이 불리언과 관련하여 작품을 만들 수 있습니다.

관련 문제