设置MediaController

时间:2016-05-18 03:48:47

标签: java android android-studio sdk

我试图设置MediaController,这样我可以在播放音频时控制,但是当我尝试将其声明为"这个"正在出现一个错误。我做错了什么?

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 公共类MainActivity扩展AppCompatActivity实现MediaRecorder.OnInfoListener {

private boolean cont;
private MediaRecorder mediaRecorder;
private MediaPlayer mediaPlayer;
private String OUTPUT_FILE;
private MediaController mediaController;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    OUTPUT_FILE = Environment.getExternalStorageDirectory()+"/androidaudio1.3gpp";
    cont=true;


}



public void buttonClicked(View view){


    switch (view.getId()){

        case R.id.startRec:
            beginRecord();
            break;

        case R.id.stopRec:
            stopRecord();
            break;

        case R.id.startPlay:
            try {
                begginPlaying();
            } catch (IOException e) {
                e.printStackTrace();
            }
            break;

        case R.id.stopPlay:
                stopPlaying();
            break;


    }
}


@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void begginPlaying() throws IOException {

    if (mediaPlayer != null)
        mediaPlayer.release();

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(OUTPUT_FILE);

    mediaController = new MediaController(this);
    mediaController.setMediaPlayer(this);

    mediaController.show();

    mediaPlayer.prepare();
    mediaPlayer.start();


}


private void stopPlaying(){

    if (mediaPlayer!= null){

        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer=null;
    }


@Override
public void start() {
    mediaPlayer.start();

}

@Override
public void pause() {
    mediaPlayer.pause();

}

@Override
public int getDuration() {
    return mediaPlayer.getDuration();
}

@Override
public int getCurrentPosition() {
    return mediaPlayer.getCurrentPosition();
}

@Override
public void seekTo(int pos) {
    mediaPlayer.seekTo(pos);
}

@Override
public boolean isPlaying() {
    return mediaPlayer.isPlaying();
}

@Override
public int getBufferPercentage() {
    return 0;
}

@Override
public boolean canPause() {
    return true;
}

@Override
public boolean canSeekBackward() {
    return true;
}

@Override
public boolean canSeekForward() {
    return true;
}

@Override
public int getAudioSessionId() {
    return 0;
}

}

2 个答案:

答案 0 :(得分:2)

MediaController要求将上下文传递给构造函数。如果没有代码或知道你在哪里宣布MediaController,我最好的猜测是你无法访问你声明MediaController的地方的上下文。从您想要使用MediaController的活动传递上下文,或将此代码放入该活动中。

https://developer.android.com/reference/android/widget/MediaController.html

修改

我尝试了您的代码,检查您的导入&确保你有import android.widget.MediaController&不是import android.media.session.MediaController

答案 1 :(得分:1)

试试这个

如果您在Activity中使用,那么您可以通过this 如果您在Fragment中使用,请使用getActivity() or context

并设置MediaController 使用此代码

video.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
            @Override
            public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                /*
                 * add media controller
                 */
                mc = new MediaController(YourActivity.this);
                video.setMediaController(mc);
                /*
                 * and set its position on screen
                 */
                mc.setAnchorView(video);
            }
        });
    }
});