현재 Android 지원 라이브러리의 MediaBrowser compat을 사용하는 클라이언트/서비스 접근 방식을 사용하는 간단한 미디어 플레이어를 개발 중입니다. 그래서 분명히 플레이어의 상태를 나타내는 int를 반환 할 수 없습니다,Android : 미디어 브라우저 클라이언트의 재생 상태가 null 포인터 예외를 반환합니다.
이FATAL EXCEPTION: main
Process: valdivia.peter.inclubooks, PID: 32383
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v4.media.session.PlaybackStateCompat.getState()' on a null object reference
at valdivia.peter.inclubooks.activities.MostrarAudiolibroActivity$3.onClick(MostrarAudiolibroActivity.java:118)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:at android.os.Handler.handleCallback(Handler.java:
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
내가 이해하는 컨트롤러 나 playbackstate 중 하나가 null 있다는 것입니다 :
나는 다음과 같은 예외를 받고 있어요. 나는 전송 컨트롤 구축 방법
@Override
public void onConnected() {
super.onConnected();
Log.d(tag,"Conecté al servicio");
Log.d(tag,"token:" + mMediaBrowser.getSessionToken().toString());
try{
controller = new MediaControllerCompat(getApplicationContext(),mMediaBrowser.getSessionToken());
}catch(RemoteException exception){
Log.d(tag,"Remote Exception al crear el Media Controller");
Toast.makeText(getApplicationContext(),"Error al crear los controles de la sesión",Toast.LENGTH_LONG).show();
return;
}
controller.registerCallback(mControllerCallback);
MediaControllerCompat.setMediaController(MostrarAudiolibroActivity.this,controller);
buildTransportControls();
}
그리고 여기에 : 여기
내가 MediaBrowser에 콜백에서 onConnected() 메소드에서 클라이언트 활동의 컨트롤러를 만드는 방법입니다
private void buildTransportControls() {
ImageButton mBotonPausa = (ImageButton) findViewById(R.id.mostrar_audiolibro_playpause);
mBotonPausa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MediaControllerCompat mediaControllerCompat = MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this);
int estado = mediaControllerCompat.getPlaybackState().getState();
if(estado == PlaybackStateCompat.STATE_PLAYING){
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().pause();
}else if (estado == PlaybackStateCompat.STATE_PAUSED){
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play();
}else{
Bundle extras = new Bundle();
extras.putString("titulo",MostrarAudiolibroActivity.this.audiolibro.getTitulo());
extras.putString("autor",MostrarAudiolibroActivity.this.audiolibro.getAutor());
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().playFromUri(Uri.parse(MostrarAudiolibroActivity.this.audiolibro.getLinkAudiolibro()),extras);
Log.d(tag,"Voy a tratar de abrir el audio");
}
}
});
ImageButton mBotonReiniciar = (ImageButton) findViewById(R.id.mostrar_audiolibro_reiniciar);
mBotonReiniciar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().seekTo(0);
//MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play();
}
});
}
무엇 나는 잘못하고있다. 미리 감사드립니다.