如何注销 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>