以下是我努力製作工作代碼以處理耳機按鈕事件的最佳方式。我讀了Android developer guide,但它顯然是錯誤的,因爲他們要求開始監聽註冊類名。Android:處理耳機按鈕事件並將信息發送至MainActivity
am.registerMediaButtonEventReceiver(RemoteControlReceiver); // Wrong
因此,我查看其他示例以更正代碼。例如,許多祕密的建議已發表在this question,我也嘗試過其他的代碼,如this,並與MediaSession另一種解決方案,並清洗不需要的,我寫這個代碼:
我實現了類RemoteControlReceiver。顯然,沒有必要對一個靜態內部類,其實,看到this comment:
public class RemoteControlReceiver extends BroadcastReceiver {
public RemoteControlReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "EVENT!!", Toast.LENGTH_SHORT).show();
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {
Toast.makeText(context, "EVENT!!", Toast.LENGTH_SHORT).show();
}
}
}
}
然後我註冊了MainActivity的onCreate(){裏面的意圖......
AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
ComponentName mReceiverComponent = new ComponentName(this, RemoteControlReceiver.class);
am.registerMediaButtonEventReceiver(mReceiverComponent);
的registerMediaButtonEventReceiver被廢棄的方式...
在清單內我記錄過濾器,在活動標記後:
<activity>
...
</activity>
<receiver android:name=".RemoteControlReceiver" android:enabled="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
注意:使用靜態內部類將是,例如,「.MainActivity $ RemoteControlReceiver」。
我的工作
compileSdkVersion 24
buildToolsVersion "24.0.0"
...
minSdkVersion 21
targetSdkVersion 24
這裏我的問題:
- 爲什麼registerMediaButtonEventReceiver已經過時?看來現在所有這些範例都是錯誤的,但我沒有發現如何在Android Developer Portal上處理這些類問題。
- 我可以通過哪種方式與MainActivity交互?我的目的是在執行一些耳機操作時對MainActivity執行操作。
你的清單聲明'MainActivity $ MediaButtonReceiver',但你的類被稱爲'RemoteControlReceiver'。這是什麼? – ianhanniballake
謝謝@ianhanniballake硝酸那。這只是一個複製粘貼錯字,但我在所有的實驗中都實現了很多接收器。現在我糾正了它,我確認設置如上所述。 – donnadulcinea