Coder1
Coder1

Reputation: 13321

mediaPlayer and back button

I have an activity that implements MediaController.MediaPlayerControl.

The audio player plays the file just fine, but I can not get out of the activity by pressing the back button.

When the back button is pressed, I get these 2 messages in the log. The current activity appears to continue to work just fine.

WARN/KeyCharacterMap(522): No keyboard for id 0
WARN/KeyCharacterMap(522): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

If I take the implementation of MediaController.MediaPlayercontrol out of the activity, the back button works as expected.

Any ideas on how to resolve this?

Here is my class. I took the irrelevant parts out so hopefully I didn't screw the copy up.

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

Stack

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

Upvotes: 1

Views: 933

Answers (1)

ajma
ajma

Reputation: 12206

Try this, when you create your new MediaController, override the dispatchKeyEvent to pass the event to the activity

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

Upvotes: 2

Related Questions