防止MediaPlayer同时播放Broadcastreceiver中的多个音频文件
Prevent MediaPlayer from playing multiple audio files in Broadcastreceiver at same time
我已经实现了一个 MediaPlayer,它在接收到特定 Intent 时开始在 BroadcastReceiver 中播放音频文件。
我尝试使用 isPlaying() 方法在开始另一个音频之前检查 MediaPlayer 是否正在播放某些内容。如果在 activity 生命周期内多次触发 Intent,它工作正常。
我的问题是,Intent 总是在 Activity 启动时触发,因此 BroadcastReceiver 每次都会创建一个 MediaPlayer 对象,例如去另一个 activity 然后回来。
我不想在离开当前 activity 时停止音频(它不会用我当前的代码停止),我只想 阻止 MediaPlayer 开始播放当另一个音频正在播放时再次。
那么我该如何创建一个可以从 BroadcastReceiver 访问的全局 MediaPlayer?或者我如何检查 MediaPlayer 是否已经存在,这样 BroadcastReceiver 就不会在每次收到 Intent 时都创建 MediaPlayer 对象?
我建议制作 BroadcastReceiver starts/stops 的单独服务。在此服务中创建您的 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) 调用它,它会 return true 或 false。
我还强烈建议您查看 https://developer.android.com/guide/components/bound-services.html 以了解有关绑定到您的服务的更多信息,然后您可以随心所欲地与 MediaPlayer 进行交互。
我已经实现了一个 MediaPlayer,它在接收到特定 Intent 时开始在 BroadcastReceiver 中播放音频文件。 我尝试使用 isPlaying() 方法在开始另一个音频之前检查 MediaPlayer 是否正在播放某些内容。如果在 activity 生命周期内多次触发 Intent,它工作正常。
我的问题是,Intent 总是在 Activity 启动时触发,因此 BroadcastReceiver 每次都会创建一个 MediaPlayer 对象,例如去另一个 activity 然后回来。 我不想在离开当前 activity 时停止音频(它不会用我当前的代码停止),我只想 阻止 MediaPlayer 开始播放当另一个音频正在播放时再次。 那么我该如何创建一个可以从 BroadcastReceiver 访问的全局 MediaPlayer?或者我如何检查 MediaPlayer 是否已经存在,这样 BroadcastReceiver 就不会在每次收到 Intent 时都创建 MediaPlayer 对象?
我建议制作 BroadcastReceiver starts/stops 的单独服务。在此服务中创建您的 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) 调用它,它会 return true 或 false。
我还强烈建议您查看 https://developer.android.com/guide/components/bound-services.html 以了解有关绑定到您的服务的更多信息,然后您可以随心所欲地与 MediaPlayer 进行交互。