2014-10-19 267 views
1

如何以編程方式註冊偵聽「PACKAGE_ADDED」操作的BroadcastReceiver?我正在嘗試安裝軟件包後執行某些操作。我可以通過在AndroidManifest.xml中註冊接收器來實現它,但我需要通過以編程方式註冊它的方式使其以另一種方式工作,以便它只在通過我的應用程序安裝的.apks上調用。我已經嘗試了幾種不同的方法,下面的代碼是從這個答案https://stackoverflow.com/a/4805733/1024722,但它不起作用。有任何想法嗎?如何以編程方式使用BroadCastReceiver

private BroadcastReceiver receiver; 

protected void onCreate(Bundle savedInstanceState) 
{ 
     super.onCreate(savedInstanceState); 
     ButterKnife.inject(this); 


     intentFilter = new IntentFilter(); 
     intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); 

     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.v("test", "received"); 
      } 
     }; 

     registerReceiver(receiver, intentFilter); 

} 

編輯:在我的應用程序的活動,我點擊一個按鈕來從服務器上下載的應用程序,然後安裝它我單擊通知欄下載的應用程序。然後介紹了這個畫面:

enter image description here

我點擊「安裝」,並將其安裝,但不叫我的onReceive方法(除非我在XML註冊的話)。然後,它顯示了這個畫面:

enter image description here

然後我點擊「完成」,並返回給我的活動與「安裝」按鈕。我想知道它是不是工作,因爲它啓動屏幕截圖中顯示的活動,因此無法在我的接收器中調用onReceive方法,因爲我的活動的onPause方法已被調用,並且不再「活動」,直到我單擊完成,這是在「PACKAGE_ADDED」操作被調用之後。

+0

該代碼是正確的。我正在使用這樣的工作,並且工作正常。你是如何測試它的? – 2014-10-19 19:24:12

+0

我運行了我的應用程序,然後安裝了一個包,我的onReceive方法從未被調用過。但是,當我在我的AndroidManifest中註冊接收器時,它會被調用 – theDazzler 2014-10-19 19:26:08

回答

-1

聽起來好像你想控制清單中發佈的組件是否活動,而不是在運行時動態註冊接收器(通過Context.registerReceiver())。

如果是這樣,你可以使用PackageManager.setComponentEnabledSetting()來控制這些部件是否處於活動狀態:

http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName,INT,INT)

注意,如果你只當你接收廣播感興趣運行,最好使用registerReceiver()。接收器組件主要用於當您需要確保每次發送廣播時啓動您的應用程序。

相關問題