1
我有一个活动,执行MediaController.MediaPlayerControl
。mediaPlayer和后退按钮
音频播放器播放文件就好了,但按下后退按钮后我无法离开活动。
当后退按钮被按下时,我在日志中得到这2条消息。目前的活动似乎继续进行得很好。
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();
}
});
}}
堆栈
----- pid 632 at 2011-07-21 13:53:37 -----
DALVIK THREADS:
"main" prio=5 tid=3 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0x4001b268 self=0xbd00
| sysTid=632 nice=0 sched=0/0 cgrp=default handle=-1344001384
at android.os.BinderProxy.transact(Native Method)
at android.app.ActivityManagerProxy.handleApplicationError(ActivityManagerNative.java:2358)
at com.android.internal.os.RuntimeInit.crash(RuntimeInit.java:339)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:76)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:887)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:884)
at dalvik.system.NativeStart.main(Native Method)
"Binder Thread #4" prio=5 tid=17 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0x44cd5370 self=0x3d6878
| sysTid=648 nice=0 sched=0/0 cgrp=default handle=3645656
at dalvik.system.NativeStart.run(Native Method)
"Binder Thread #3" prio=5 tid=15 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0x44cd52b0 self=0x3d5ca8
| sysTid=647 nice=0 sched=0/0 cgrp=default handle=4013152
at dalvik.system.NativeStart.run(Native Method)
"Binder Thread #2" prio=5 tid=13 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0x44c03da0 self=0x137be8
| sysTid=637 nice=0 sched=0/0 cgrp=default handle=1281760
at dalvik.system.NativeStart.run(Native Method)
"Binder Thread #1" prio=5 tid=11 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0x44c00a48 self=0x12def8
| sysTid=636 nice=0 sched=0/0 cgrp=default handle=1159488
at dalvik.system.NativeStart.run(Native Method)
"JDWP" daemon prio=5 tid=9 VMWAIT
| group="system" sCount=1 dsCount=0 s=N obj=0x44bfe2a0 self=0x138d18
| sysTid=635 nice=0 sched=0/0 cgrp=default handle=1193192
at dalvik.system.NativeStart.run(Native Method)
"Signal Catcher" daemon prio=5 tid=7 RUNNABLE
| group="system" sCount=0 dsCount=0 s=N obj=0x44bfe1e8 self=0x1233b0
| sysTid=634 nice=0 sched=0/0 cgrp=default handle=1239344
at dalvik.system.NativeStart.run(Native Method)
"HeapWorker" daemon prio=5 tid=5 VMWAIT
| group="system" sCount=1 dsCount=0 s=N obj=0x436a13f8 self=0x118bc8
| sysTid=633 nice=0 sched=0/0 cgrp=default handle=1163392
at dalvik.system.NativeStart.run(Native Method)
----- end 632 -----
哇。这是发生在模拟器,物理设备还是两者? – Shlublu
模拟器和我的物理设备都会发生这种情况。当我点击回家后,大约需要20秒钟,然后我得到一个“对不起......已经意外停止,请再试一次。[Force close]” – Coder1
你会发布堆栈跟踪的副本吗?必须有一个你可以捕捉到的。 – Shlublu