BroadcastReceiver 中的 MediaPlayer 在 Android 中不工作
MediaPlayer in BroadcastReceiver not working in Android
我在让 BroadcastReceiver 中的 MediaPlayer 工作时遇到问题。我想做的是在 Firebase 发出通知后 x 分钟播放声音和振动,就像第二次提醒一样。
我有一个扩展 FirebaseMessagingService 的 class,在 onMessageReceived() 方法中我调用了 setOnetimeTimer(this) 即:
public void setOnetimeTimer(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 1), pi); // 1 minute
}
那么 AlarmManagerBroadcastReceiver() 是:
public class AlarmManagerBroadcastReceiver 扩展 BroadcastReceiver {
MediaPlayer mp = null;
@Override
public void onReceive(Context context, Intent intent) {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
mp = MediaPlayer.create(context, R.raw.my_weird_sound);
mp.start();
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
}
振动执行没有问题,但没有播放声音,我得到的错误是:
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
D/MediaPlayer: setSubtitleAnchor in MediaPlayer
还请记住,我的清单中有 AlarmManagerBroadcastReceiver。
如有任何帮助,我们将不胜感激!
当 MediaPlayer 没有正确实现其架构时,就会出现这些类型的异常。 Achitecure
现在试试这个:
MediaPlayer mp = null;
@Override
public void onReceive(Context context, Intent intent) {
if (mp != null && mp.isPlaying()) {
mp.stop();
mp.release();
mp=null;
}
else {
mp = null;
}
mp = MediaPlayer.create(context, R.raw.my_weird_sound);
mp.start();
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (!mp.isPlaying()) {
mp.release();
}
else {
mp.stop();
mp.release();
}
}
});
}
我在让 BroadcastReceiver 中的 MediaPlayer 工作时遇到问题。我想做的是在 Firebase 发出通知后 x 分钟播放声音和振动,就像第二次提醒一样。 我有一个扩展 FirebaseMessagingService 的 class,在 onMessageReceived() 方法中我调用了 setOnetimeTimer(this) 即:
public void setOnetimeTimer(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 1), pi); // 1 minute
}
那么 AlarmManagerBroadcastReceiver() 是:
public class AlarmManagerBroadcastReceiver 扩展 BroadcastReceiver {
MediaPlayer mp = null;
@Override
public void onReceive(Context context, Intent intent) {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
mp = MediaPlayer.create(context, R.raw.my_weird_sound);
mp.start();
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
}
振动执行没有问题,但没有播放声音,我得到的错误是:
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
D/MediaPlayer: setSubtitleAnchor in MediaPlayer
还请记住,我的清单中有 AlarmManagerBroadcastReceiver。
如有任何帮助,我们将不胜感激!
当 MediaPlayer 没有正确实现其架构时,就会出现这些类型的异常。 Achitecure
现在试试这个:
MediaPlayer mp = null;
@Override
public void onReceive(Context context, Intent intent) {
if (mp != null && mp.isPlaying()) {
mp.stop();
mp.release();
mp=null;
}
else {
mp = null;
}
mp = MediaPlayer.create(context, R.raw.my_weird_sound);
mp.start();
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (!mp.isPlaying()) {
mp.release();
}
else {
mp.stop();
mp.release();
}
}
});
}