如何注销 MediaButtonReceiver onDestroy?
How to unregister MediaButtonReceiver onDestroy?
我在我的流媒体服务中使用 MediaButtonReciever 来监听处理耳机和不同设备的操作
我在 Manifest 中这样声明它
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
只要应用程序在后台,这些操作就可以正常工作
一旦应用程序终止,如果我点击任何 MediaButton 它崩溃为媒体按钮并出现以下崩溃
Fatal Exception: java.lang.RuntimeException: Unable to start receiver android.support.v4.media.session.MediaButtonReceiver: java.lang.IllegalStateException: Could not find any Service that handles android.intent.action.MEDIA_BUTTON or a media browser service implementation
问题是即使应用程序被销毁,接收器仍会继续接收,现在如何在应用程序关闭后取消注册接收器?
我试过 audioManager.unregister(MediaButtonReciever) 但它已贬值
如果您只想在您的应用 运行 时处理按钮,那么您不应该在清单中声明它。当您希望它响应事件时,您应该在代码中动态注册和取消注册 BroadcastReceiver
。
要注册接收器,请执行:
BroadcastReceiver receiver = new MediaButtonReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
registerReceiver(receiver, filter);
完成后(即:在组件的 onDestroy()
中),像这样注销接收器:
unregisterReceiver(receiver);
问题是我在我的清单中使用默认值 class,就像这样
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在 onReceive() 完成后接收器自动注销错误
Once you return from onReceive(), the BroadcastReceiver is no longer active, source
所以我在自定义中扩展了 MediaRecieverButton 所有 idid class MyMediaButtonReceiver
并像这样编辑我的清单
<receiver android:name=".MyMediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
而且效果很好
在我的例子中,我遇到了这个错误,我通过将我的服务的启用标志设置为 true 来解决它:
android:enabled="true"
<service
android:name=".MyService"
android:enabled="true"
android:multiprocess="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
我在我的流媒体服务中使用 MediaButtonReciever 来监听处理耳机和不同设备的操作 我在 Manifest 中这样声明它
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
只要应用程序在后台,这些操作就可以正常工作 一旦应用程序终止,如果我点击任何 MediaButton 它崩溃为媒体按钮并出现以下崩溃
Fatal Exception: java.lang.RuntimeException: Unable to start receiver android.support.v4.media.session.MediaButtonReceiver: java.lang.IllegalStateException: Could not find any Service that handles android.intent.action.MEDIA_BUTTON or a media browser service implementation
问题是即使应用程序被销毁,接收器仍会继续接收,现在如何在应用程序关闭后取消注册接收器? 我试过 audioManager.unregister(MediaButtonReciever) 但它已贬值
如果您只想在您的应用 运行 时处理按钮,那么您不应该在清单中声明它。当您希望它响应事件时,您应该在代码中动态注册和取消注册 BroadcastReceiver
。
要注册接收器,请执行:
BroadcastReceiver receiver = new MediaButtonReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
registerReceiver(receiver, filter);
完成后(即:在组件的 onDestroy()
中),像这样注销接收器:
unregisterReceiver(receiver);
问题是我在我的清单中使用默认值 class,就像这样
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在 onReceive() 完成后接收器自动注销错误
Once you return from onReceive(), the BroadcastReceiver is no longer active, source
所以我在自定义中扩展了 MediaRecieverButton 所有 idid class MyMediaButtonReceiver
并像这样编辑我的清单
<receiver android:name=".MyMediaButtonReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
而且效果很好
在我的例子中,我遇到了这个错误,我通过将我的服务的启用标志设置为 true 来解决它:
android:enabled="true"
<service
android:name=".MyService"
android:enabled="true"
android:multiprocess="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>