防止MediaPlayer同时在Broadcastreceiver中播放多个音频文件

时间:2017-01-20 22:29:39

标签: android android-activity broadcastreceiver android-mediaplayer android-lifecycle

我已经实现了一个MediaPlayer,它在接收某个Intent时开始在BroadcastReceiver中播放音频文件。 我尝试使用isPlaying()方法检查MediaPlayer在启动另一个音频之前是否正在播放某些内容。如果在活动生命周期内多次触发Intent,它可以正常工作。

我的问题是,当Activity启动时总是触发Intent,从而使BroadcastReceiver每次创建一个MediaPlayer对象,例如去另一个活动然后回来。 离开当前活动时我不想停止音频(并且它不会停止使用我当前的代码),我只想阻止 MediaPlayer再次开始播放音频播放。 那么我该怎么说呢?创建一个可以从BroadcastReceiver访问的全局MediaPlayer?或者我如何检查MediaPlayer是否已经存在,以便BroadcastReceiver每次收到Intent时都不会创建MediaPlayer对象?

1 个答案:

答案 0 :(得分:0)

我建议制作一个BroadcastReceiver启动/停止的单独服务。在此服务中创建您的MediaPlayer对象。然后,您可以检查服务是否已在运行,以查看您的MediaPlayer是否已存在。或者更好的方法是创建绑定到服务,然后您可以从您的活动中与它进行交互。以下是一些可用于检查您的服务当前是否正在运行的代码。

public boolean isServiceRunning(Context context, Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

您可以使用isServiceRunning(this,MyService.class)调用它,它将返回true或false。

我还强烈建议您查看https://developer.android.com/guide/components/bound-services.html以了解有关绑定到您服务的更多信息,然后您就可以根据自己的内容与MediaPlayer进行互动。