应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作

Posted

技术标签:

【中文标题】应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作【英文标题】:Android broadcast receiver for media controls stops working after app is closed 【发布时间】:2020-04-07 13:14:07 【问题描述】:

所以我一直在尝试构建一个音乐播放器应用程序,尽管访问了 *** 上的所有页面,但我仍然遇到一个问题。代码大部分工作正常,但是当我按下后退按钮关闭应用程序时,操作按钮停止工作,即使当我按下主页按钮时它们工作正常。我认为即使我不希望关闭应用程序,广播接收器也会取消注册。代码如下:

public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() 
    @Override
    public void onReceive(Context context, Intent intent) 
        String action = intent.getExtras().getString("actionname");
        Helper.makeToast(context, action);

        switch (action) 
            case CreateNotification.ACTION_PREVIUOS:
//play previous
            case CreateNotification.ACTION_PLAY:

                if (isPlaying) 
                    //pause
                 else 
                   // play
                


                break;
            case CreateNotification.ACTION_NEXT:
               //play next
        
    
;

这是主要活动的onresume方法

 @Override
  protected void onResume() 
    super.onResume();


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
        registerReceiver(broadcastReceiver, new IntentFilter("TRACKS_TRACKS"));
        startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
    


这是服务

public class OnClearFromRecentService extends Service 
@Nullable
@Override
public IBinder onBind(Intent intent) 
    return null;


@Override
public int onStartCommand(Intent intent, int flags, int startId) 
    return START_STICKY_COMPATIBILITY;


@Override
public void onDestroy() 
    super.onDestroy();


@Override
public void onTaskRemoved(Intent rootIntent) 
    stopSelf();


在清单中:

<receiver .services.OnClearFromRecentService" />

所以我的问题是:当我关闭应用程序时,广播接收器是否会自动取消注册?如果是这样,我该如何防止这种情况?关闭应用时如何保持广播接收器正常工作?

【问题讨论】:

【参考方案1】:

当您关闭应用时,此类接收器会自动取消注册。这是对的。但是,您必须在 onStop() 中从您的接收器中注销。因为如果您不这样做,您将在 LogCat 中收到 LeakIntentMemory 错误消息,但您的应用程序不会崩溃。您可以从 logcat 中检查它。我认为如果你想在你的应用关闭时收到一些东西,你必须在 androidManifest 中声明你的接收者并带有一个动作名称。

 <receiver android:name=".YourReceiver" >
        <intent-filter>
            <action android:name="first.custom.action"> </action>
        </intent-filter>
    </receiver>

【讨论】:

还是一样的结果。在应用程序运行时单击操作按钮时,它可以正常工作。但是,当我单击后退按钮关闭应用程序时,操作按钮就会停止工作。

以上是关于应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作的主要内容,如果未能解决你的问题,请参考以下文章

媒体控件栏在 VideoView Android 中出现一秒钟后消失

在 cordova/phonegap Android 应用程序上关闭屏幕后媒体停止播放

Android车载多媒体与MediaSession框架

iOS 上的浮动媒体控件

Android MediaPlayer+SurfaceView播放视频(附Demo)

如何更新 Android 媒体数据库