Android mediaPlayer和后退按钮

Android mediaPlayer和后退按钮,android,Android,我有一个实现MediaController.MediaPlayerControl的活动 音频播放器可以很好地播放文件,但我不能通过按“后退”按钮退出活动 当按下后退按钮时,我会在日志中看到这两条消息。目前的活动似乎继续运作良好 WARN/KeyCharacterMap(522): No keyboard for id 0 WARN/KeyCharacterMap(522): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 如果

我有一个实现
MediaController.MediaPlayerControl
的活动

音频播放器可以很好地播放文件,但我不能通过按“后退”按钮退出活动

当按下后退按钮时,我会在日志中看到这两条消息。目前的活动似乎继续运作良好

WARN/KeyCharacterMap(522): No keyboard for id 0
WARN/KeyCharacterMap(522): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
如果我将MediaController.MediaPlayercontrol的实现从活动中移除,则“后退”按钮将按预期工作

有没有办法解决这个问题

这是我的班级。我把不相关的部分拿了出来,希望我没有把复印件弄糟

public class ContentActivity extends Activity implements OnPreparedListener, MediaController.MediaPlayerControl {

private static final String TAG = "AudioPlayer";
private MediaPlayer mediaPlayer;
private MediaController mediaController;
private String audioFile;
private Handler handler = new Handler();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content);


audioFile = "http://example.com/foo.mp3"
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);

mediaController = new MediaController(this){
     @Override
     public void hide() {
         this.show(0);
     }

     @Override
     public void setMediaPlayer(MediaPlayerControl player) {
         super.setMediaPlayer(player);
         this.show();
     }
 };

mediaPlayer.setDataSource(audioFile);
mediaPlayer.prepare();
}

@Override
protected void onStop() {
super.onStop();
mediaPlayer.stop();
mediaPlayer.release();
}

//--MediaPlayerControl methods----------------------------------------------------
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;
}
//--------------------------------------------------------------------------------
public void onPrepared(MediaPlayer mediaPlayer) {
    Log.d(TAG, "onPrepared");
    mediaController.setMediaPlayer(this);
    mediaController.setAnchorView(findViewById(R.id.mediaController));

    handler.post(new Runnable() {
      public void run() {
        mediaController.setEnabled(true);
        mediaController.show();
      }
    });
}}
堆叠


尝试这样做,在创建新的MediaController时,重写dispatchKeyEvent以将事件传递给活动

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    ContentActivity.this.dispatchKeyEvent(event);
}

哇!这是发生在emulaor、物理设备还是两者都发生?这发生在emulator和我的物理设备上。单击“主页”后,大约需要20秒,然后我会收到一个“抱歉…意外停止。请重试。[强制关闭]”。是否发布堆栈跟踪的副本?一定有一个你能抓到的。嘿,没问题。谢谢你看一看。谢谢
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    ContentActivity.this.dispatchKeyEvent(event);
}