web-dev-qa-db-fra.com

MediaController avec MediaPlayer

Je veux des contrôles multimédias tels que la lecture/pause pour la diffusion audio en continu que je joue dans mon application. J'utilise MediaPlayer pour diffuser et lire l'audio.

Quelqu'un peut-il fournir un extrait de code sur la façon d'utiliser MediaController avec MediaPlayer?

Merci Chris

21
Chris

Il est assez simple d'ajouter un contrôleur multimédia dans un lecteur multimédia. Faites en sorte que votre activité implémente MediaPlayerControl et ajoutez des méthodes non implémentées. Le code est comme ci-dessous:

J'utilise le code des démos Api d'ici http://developer.Android.com/resources/samples/ApiDemos/src/com/example/Android/apis/media/MediaPlayerDemo_Video.html

public class ActivityVedioPlay extends Activity implements
        OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
        OnVideoSizeChangedListener, SurfaceHolder.Callback, MediaPlayerControl {
.....

    private MediaPlayer mMediaPlayer;
    private MediaController mcontroller;
    private Handler handler = new Handler();
.....
@Override
    public boolean onTouchEvent(MotionEvent event) {
        /*
         * the MediaController will hide after 3 seconds - tap the screen to
         * make it appear again
         */
        mcontroller.show();
        return false;
    }
......
private void playVideo() {
        doCleanUp();
        try {
            path = getIntent().getStringExtra("url");
            if (path == "") {
                Toast.makeText(ActivityVedioPlay.this, "URL Not found",
                        Toast.LENGTH_LONG).show();
            }
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setScreenOnWhilePlaying(true);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mcontroller = new MediaController(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
......

public void onPrepared(MediaPlayer mediaplayer) {
        Log.d(TAG, "onPrepared called");
        mIsVideoReadyToBePlayed = true;
        if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
            startVideoPlayback();
        }
        mcontroller.setMediaPlayer(this);
        mcontroller.setAnchorView(findViewById(R.id.mediaplayer_surfaceview_container));
        handler.post(new Runnable() {

            public void run() {
                mcontroller.setEnabled(true);
                mcontroller.show();
            }
        });
    }

//mediacontroller implemented methods

    public void start() {
        mMediaPlayer.start();
    }

    public void pause() {
        mMediaPlayer.pause();
    }

    public int getDuration() {
        return mMediaPlayer.getDuration();
    }

    public int getCurrentPosition() {
        return mMediaPlayer.getCurrentPosition();
    }

    public void seekTo(int i) {
        mMediaPlayer.seekTo(i);
    }

    public boolean isPlaying() {
        return mMediaPlayer.isPlaying(); 
    }

    public int getBufferPercentage() {
        return 0;
    }

    public boolean canPause() {
        return true;
    }

    public boolean canSeekBackward() {
        return true;
    }

    public boolean canSeekForward() {
        return true;
    }
47
RiksAndroid

Aussi simple que ce code extrait de ici . Ils utilisent VideoView au lieu d'un MediaPlayer, ce qui vous permet d'économiser quelques lignes de code:

Disposition:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout Android:id="@+id/LinearLayout01"
    Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:paddingLeft="2px" Android:paddingRight="2px"
    Android:paddingTop="2px" Android:paddingBottom="2px"
    Android:layout_width="fill_parent" Android:orientation="vertical">

    <VideoView Android:layout_height="fill_parent"
        Android:layout_width="fill_parent" Android:id="@+id/VideoView"></VideoView>

</LinearLayout>

Et le code:

public class VideoPlayerController extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.video);

        VideoView videoView = (VideoView) findViewById(R.id.VideoView);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
// Set video link (mp4 format )
        Uri video = Uri.parse("mp4 video link");
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(video);
        videoView.start();

    }
}

C'est tout. Remplacez simplement mp4 video link avec une URL de vidéo en streaming.

14