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