2012-07-12 70 views
0

我有一個BroadcastReciever在系統應用程序中,我想發送一個Intent(用於測試目的,因爲我正在修改該系統應用程序)。系統應用程序未收到廣播的意圖

該系統應用程序的AndroidManifest.xml看起來是這樣的:

<application android:label="@string/app_name"> 
    <receiver android:label="StateReceiver" android:name=".abstractor.StateReceiver" android:enabled="true" android:exported="true"> 
     <intent-filter> 
      <action android:name="com.sec.android.contextaware.HEADSET_PLUG" /> 
      <action android:name="android.intent.action.LOCALE_CHANGED" /> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" /> 
      <category android:name="android.intent.category.HOME" />     
     </intent-filter> 
    </receiver> 
    <provider android:name=".manager.LoggingDataProvider" android:authorities="com.sec.android.contextaware.manager.LoggingDataProvider" /> 
</application> 

我用一個測試應用程序,並檢查目標系統的應用程序確實可以接收該意圖:

Intent intent = new Intent(); 
intent.setAction("com.sec.android.contextaware.HEADSET_PLUG"); 

PackageManager pm = getPackageManager(); 
for (ResolveInfo resolveInfo : pm.queryBroadcastReceivers(bt, 0)) { 
    Log.d("APP: ", resolveInfo.toString()); 
} 

,並取回與系統應用程序的信息一ResolveInfo,所以它應該能夠接受的意圖。然後我播出了意圖:

sendBroadcast(intent); 

但是沒有任何反應,意圖沒有收到。我完全控制了目標系統應用程序的清單文件和代碼。是否有可能以某種方式獲得意圖? 設備已生根。

回答

0

你試過sendStickyBroadcast(intent)嗎?註冊一個空接收器後,你應該能夠檢索最後發送的一個。不確定它會有幫助。順便說一句,你發送給目標系統的應用程序是什麼?它沒有到達那裏,因爲它不允許或因爲你正在解決它的方式有什麼問題:intent.setAction(「com.sec.android.contextaware.HEADSET_PLUG」);

我猜測com.sec.android.contextaware.HEADSET_PLUG沒有權限允許接收或尋址不正確。仔細檢查com.sec.android.contextaware.HEADSET_PLUG。

+0

目標是ContextAwareService.apk,一種三星服務,它監聽某些事件並在通知欄中顯示內容。明天將嘗試你的建議,現在睡覺的時間。 ;) – rickythefox 2012-07-12 22:36:17

+0

沒有工作。上面的AndroidManifest.xml來自目標,不應該能夠從任何人那裏接收「com.sec.android.contextaware.HEADSET_PLUG」嗎? – rickythefox 2012-07-13 09:48:53