2015-12-09 29 views
1

我的應用程序註冊爲目的("android.intent.action.MEDIA_BUTTON")來處理有線耳機使用鍵下面的代碼可以在任何應用程序廣播意圖與動作名稱「android.intent.action.MEDIA_BUTTON」

<receiver 
    android:name=".HeadsetEventReceiver" 
    android:enabled="true" > 
    <intent-filter android:priority="2147483647" > 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 

接收機HeadsetEventReceiver壓制的做一些操作在接受這個意圖。

現在我有一個示例應用程序廣播一個意向行動"android.intent.action.MEDIA_BUTTON"與有效的KeyEvent對象使用下面的代碼。

Intent newIntent = new Intent("android.intent.action.MEDIA_BUTTON") ; 
KeyEvent event = new KeyEvent(System.currentTimeMillis(), System.currentTimeMillis(), KeyEvent.ACTION_DOWN, 79, 1, 1, 1, 1, 1, InputDevice.SOURCE_TOUCHPAD); 
newIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); 
getApplicationContext().sendBroadcast(newIntent); 

我的應用程序正在接收這個意圖並處理這個數據,就好像它實際上是由於耳機按鍵而廣播的。

我的查詢是當任何應用程序試圖發送廣播與本地意圖(例如:"android.intent.action.BOOT_COMPLETED")securityException被拋出。爲什麼它不適用於上述意圖("android.intent.action.MEDIA_BUTTON")。

+0

你正在使用什麼api?因爲它不會發生在api> = 15中。 – Pankaj

+0

我使用api 21.我的問題是爲什麼當應用程序嘗試使用Intent(「android.intent.action.MEDIA_BUTTON」)發送Broadcast時不引發securityException?它與偵聽mediaButton事件偵聽器無關。 – Mallik

回答

0

由於4.0或更高Android的文件說,你必須使用registerMediaButtonEventReceiver登記的意圖行動。如果不註冊到registerMediaButtonEventReceiver,您將不會收到廣播消息。

下面是一個是,如果你使用的是registerMediaButtonEventReceiver,那麼你會得到廣播否則不會有記錄here

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 
... 

// Start listening for button presses 
am.registerMediaButtonEventReceiver(RemoteControlReceiver); 
... 

// Stop listening for button presses 
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 

這樣的代碼。

+0

我正在使用api 21.我的問題是爲什麼當應用程序嘗試使用Intent(「android.intent.action.MEDIA_BUTTON」)發送Broadcast時不引發securityException?它與偵聽mediaButton事件偵聽器無關。 – Mallik

+0

它不會拋出異常,因爲他們已經定義了接收器來廣播相同的內容,所以它不是一個問題。我猜是這樣。 – Pankaj

相關問題