2011-07-21 21 views
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の実装を取る場合、期待どおり、戻るボタンが機能します。

これを解決する方法についてのご意見はありますか?

ここは私のクラスです。私は無関係な部分を取り出したので、うまくいけば私はコピーをねじにしなかった。

----- 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 ----- 
+0

うわーにイベントを渡すdispatchKeyEventをオーバーライドし、あなたの新しいのMediaControllerを作成するときに、これを試してみてください。それはエミュレータ、物理的なデバイス、またはその両方で起こっていますか? – Shlublu

+0

これは、エミュレータと物理デバイスの両方で発生します。私は自宅をクリックした後、約20秒かかると、 "申し訳ありませんが....予期せず停止しました。もう一度やり直してください[強制終了]" – Coder1

+0

スタックトレースのコピーを投稿しますか?捕まえることができなければなりません。 – Shlublu

答えて

2

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

スタックは、活動

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