2017-09-16 1 views
0

BroadcastReceiverでMediaPlayerを動作させる際に問題が発生しました。私が高レベルでやりたいことは、Firebaseからの通知が2分後に来てから数分後に音と振動を再生することです。 IはFirebaseMessagingService拡張するクラスを有し、onMessageReceived()方法で私はsetOnetimeTimerを呼び出す(これは)であるた:BroadcastReceiverのMediaPlayerがAndroidで動作しない

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ブロードキャスト受信者{

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を持っていることにも留意してください。

助けていただけたら幸いです!

答えて

0

MediaPlayerがアーキテクチャを適切に実装していない場合、この種の例外が発生します。 logcatのメッセージが同じとどまったが、今、それは完全に働いた

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(); 
       } 

      } 
     }); 
    } 
+0

Achitecure

は今、これを試してみてください。迅速な回答をいただきありがとうございます! – AmadeusX

+0

** MediaPlayerのD/MediaPlayer:setSubtitleAnchor **この警告は、MediaPlayerに字幕を追加しないと発生します。この警告は無視できます。 –

関連する問題