我已经实现了一个MediaPlayer,它在接收某个Intent时开始在BroadcastReceiver中播放音频文件。 我尝试使用isPlaying()方法检查MediaPlayer在启动另一个音频之前是否正在播放某些内容。如果在活动生命周期内多次触发Intent,它可以正常工作。
我的问题是,当Activity启动时总是触发Intent,从而使BroadcastReceiver每次创建一个MediaPlayer对象,例如去另一个活动然后回来。 离开当前活动时我不想停止音频(并且它不会停止使用我当前的代码),我只想阻止 MediaPlayer再次开始播放音频播放。 那么我该怎么说呢?创建一个可以从BroadcastReceiver访问的全局MediaPlayer?或者我如何检查MediaPlayer是否已经存在,以便BroadcastReceiver每次收到Intent时都不会创建MediaPlayer对象?
答案 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进行互动。