Я использую медиаконтроллер, связанный с медиаплеером, для воспроизведения звука. Проблема в том, что медиа-контроллер скрывается, как только теряет фокус. У меня есть кнопка, при нажатии которой воспроизводится звук, а внизу экрана появляется медиа-контроллер.
Но при нажатии лайф пауза секунд через 5 медиаконтроллер сам прячется.
вот часть моих кодов. Я останавливаю медиаплеер, как только медиаконтроллер прячется, чтобы звук не воспроизводился постоянно
Все коды для медиа-контроллера:
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(currentFragment);
mediaController = new MediaController(getActivity()){
@Override
public void hide()
{
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
super.hide();
}
};
try {
mediaPlayer.setDataSource(sound.getSound());
mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaPlayer.start();
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("media status", "onPrepared");
handler.post(new Runnable() {
public void run() {
launchMediaController();
progress.dismiss();
}
});
}
void launchMediaController(){
mediaController.setEnabled(true);
mediaPlayer.start();
mediaController.setMediaPlayer(soundController);
mediaController.setAnchorView(getView());
mediaController.show(0);
}
private class SoundController implements MediaController.MediaPlayerControl{
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
@Override
public int getAudioSessionId() {
// TODO Auto-generated method stub
return 0;
}
}
Правки: Основываясь на ответе Либина, я безуспешно сделал следующее: Расширяет MediaController и переопределяет событие касания
private class MyMediaController extends MediaController{
public MyMediaController(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
}
Использовать расширенный класс
mediaController = new MyMediaController(getActivity()){
@Override
public void hide()
{
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
super.hide();
}
};
launchMediaController() на самом деле запускает медиа-контроллер. Мой вопрос, почему медиа-контроллер скрывается сам по себе через несколько секунд после того, как пользователь прикоснется к нему? Есть ли какое-нибудь решение для этого?