android – 如何在清单中注册* inner * MEDIA_BUTTON BroadcastReceiver?
作者:互联网
我按下时,我的应用程序可以识别我的耳机按钮,但其中一个按钮需要调用MyCustomActivity中的方法.问题是onReceive的第一个参数是一个无法转换为Activity的Context,因此我被迫将我的BroadcastReceiver实现为MyCustomActivity中的内部类.
到目前为止这么好但我如何在清单中注册这个内部MediaButtonEventReceiver?
对于独立班级来说,这很简单:
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
为MyCustomActivity的mReceiver做同样的技巧/语法是什么?
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
// ...
}
}
解决方法:
你没有,如果它是活动的一部分,你动态注册它:
BroadcastReceiver receiver;
@Override
protected void onCreate (Bundle b)
{
super.onCreate (b);
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.setPriority(10000);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
// ...
}
};
registerReceiver (receiver, filter);
}
然后不要忘记在onPause()中取消注册(以避免泄漏).
@Override
protected void onPause()
{
try{
unregisterReceiver (receiver);
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
super.onPause();
}
但是,这种动态注册意味着,如果您的Activity不在前台,则该按钮将不起作用.您可以尝试在onDestroy()中取消注册,但是避免泄漏的最可靠方法是onPause().
或者,要使按钮无论如何响应,请考虑制作服务,然后注册接收器.
标签:android-audiomanager,android,broadcastreceiver 来源: https://codeday.me/bug/20190929/1832895.html