以下是我努力制作工作代码以处理耳机按钮事件的最佳方式。我读了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