2017-09-16 5 views
0

BroadcastReceiver에서 MediaPlayer를 작동시키는 데 문제가 있습니다. 내가 높은 수준에서하고 싶은 것은 두 번째 알림과 같이 Firebase로부터 알림을받은 후 x 분 후에 소리와 진동을 재생하는 것입니다. I가 FirebaseMessagingService 연장되는 클래스가 있으며 onMessageReceived() 방법 I은 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 extends 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

메시지는 동일 머물렀다하지만 지금은 완벽했다. 빠른 답변 주셔서 대단히 감사합니다! – AmadeusX

+0

** MediaPlayer의 D/MediaPlayer : setSubtitleAnchor **이 경고는 MediaPlayer에 자막을 추가하지 않으면 발생합니다.이 경고는 무시해도됩니다. –

관련 문제