首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置MediaController

设置MediaController
EN

Stack Overflow用户
提问于 2016-05-18 11:48:47
回答 2查看 488关注 0票数 0

我正在尝试设置MediaController,以便在播放音频时可以进行控制,但当我尝试声明它时,"this“作为错误出现。我做错了什么?

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

代码语言:javascript
复制
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;
}

}

EN

回答 2

Stack Overflow用户

发布于 2016-05-18 12:43:47

MediaController需要将上下文传递给构造函数。如果没有更多的代码或者不知道在哪里声明了MediaController,我最好的猜测是您不能访问声明MediaController的地方的上下文。从您希望使用MediaController的活动中传递上下文,或者将此代码放入该活动中。

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

编辑:

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

票数 2
EN

Stack Overflow用户

发布于 2016-05-18 12:44:06

尝尝这个

如果在Activity中使用,则可以传递this如果在Fragment中使用,则可以使用getActivity() or context

要设置MediaController,请使用以下代码

代码语言:javascript
复制
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);
            }
        });
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37289947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档