2017-09-16 27 views
0

我有一個問題讓MediaPlayer在BroadcastReceiver中工作。我想在高層做什麼,就是在Firebase發出通知之後x分鐘發出聲音和振動,就像第二次提醒一樣。 我具有延伸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()是:

公共級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在我的清單。

任何幫助,將不勝感激!

回答

0

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

      } 
     }); 
    } 
+0

在logcat中的信息保持不變,但現在它完美地工作。非常感謝您的快速回答! – AmadeusX

+0

** D/MediaPlayer:MediaPlayer中的setSubtitleAnchor **當您不添加字幕到MediaPlayer時會發生此警告,您可以忽略此警告。 –

相關問題