Thomas
Thomas

Reputation: 293

How to get Media Controller to work

I have a song within my application that I would like to be able to control via a Media Controller, I have the code which I believe would be accurate representaion of how to do this, however I get 2 errors within my code, I will give details bellow, could anyone please help me.

Error 1: The method setMediaPlayer(MediaController.MediaPlayerControl) in the type MediaController is not applicable for the arguments (MediaPlayer)

Error 2: The method setMediaController(MediaController) is undefined for the type MediaPlayer

The code I have so far:

MediaPlayer Song;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN );
        setContentView(R.layout.billy);

        Song = MediaPlayer.create(BillyConnoly.this, R.raw.clip_1);

        MediaController mc = new MediaController(this);
        mc.setMediaPlayer(Song);
        Song.setMediaController(mc);
    }

Upvotes: 0

Views: 1408

Answers (1)

crazylpfan
crazylpfan

Reputation: 1098

Thomas, I'll try to explain the link here.

First, you need to define your player, controller, and handler fields:

  private MediaPlayer mediaPlayer;
  private MediaController mediaController;

  private Handler handler = new Handler();

Next, you need to instantiate all of your appropriate objects (as you have done), as well as register an OnPreparedListener:

mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);

mediaController = new MediaController(this);

Then, you prepare and start the mediaPlayer:

try {
  mediaPlayer.setDataSource(audioFile);
  mediaPlayer.prepare();
  mediaPlayer.start();
} catch (IOException e) {
  Log.e(TAG, "Could not open file " + audioFile + " for playback.", e);
}

When the mediaPlayer is prepared, the controller will be set:

  public void onPrepared(MediaPlayer mediaPlayer) {
    Log.d(TAG, "onPrepared");
    mediaController.setMediaPlayer(this);

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

Does it make more sense now?

EDIT: This is how you would play a file from the res/raw folder:

int resID=getResources().getIdentifier("filename", "raw", getPackageName());
MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);

Upvotes: 1

Related Questions