an0*_*00b 3 android broadcastreceiver android-audiomanager
我设法让我的耳机按钮在按下时被我的应用程序识别,但其中一个按钮需要调用 MyCustomActivity 中的方法。问题是 onReceive 的第一个参数是一个无法转换为 Activity 的上下文,因此我被迫将 BroadcastReceiver 实现为 MyCustomActivity 中的内部类。
到目前为止一切顺利,但如何在清单中注册这个内部 MediaButtonEventReceiver?
对于独立类,这很简单:
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
对 MyCustomActivity 的 mReceiver 执行相同操作的技巧/语法是什么?
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
你不,如果它是活动的一部分,你动态注册它:
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);
}
Run Code Online (Sandbox Code Playgroud)
然后不要忘记注销onPause()(以避免泄漏)。
@Override
protected void onPause()
{
try{
unregisterReceiver (receiver);
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
super.onPause();
}
Run Code Online (Sandbox Code Playgroud)
但是,这种动态注册确实意味着,如果您的 Activity 不在前台,则该按钮将不起作用。您可以尝试取消注册onDestroy(),但避免泄漏的最可靠方法是onPause().
或者,要使按钮无论如何都响应,请考虑创建一个服务,并注册您的接收器。
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |