Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止MediaPlayer流,然后重新启动它?安卓_Java_Android_Media Player_Android Mediaplayer - Fatal编程技术网

Java 如何停止MediaPlayer流,然后重新启动它?安卓

Java 如何停止MediaPlayer流,然后重新启动它?安卓,java,android,media-player,android-mediaplayer,Java,Android,Media Player,Android Mediaplayer,我正在制作一个简单的应用程序来播放在线广播流。我知道如何设置这条小溪。这是到目前为止我的代码。它设置了一条流,并且播放得很好。但是如果我按了停止键,我就不能让它重新启动。我错过了什么明显的东西吗 final MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataS

我正在制作一个简单的应用程序来播放在线广播流。我知道如何设置这条小溪。这是到目前为止我的代码。它设置了一条流,并且播放得很好。但是如果我按了停止键,我就不能让它重新启动。我错过了什么明显的东西吗

final MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(url);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // might take long! (for buffering, etc)

   streamButton = (ToggleButton) findViewById(R.id.playstopstream);

   streamButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton arg0, final boolean isChecked) {
        // TODO Auto-generated method stub
         new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                if(isChecked)
                {


                    mediaPlayer.start();

                }
                else
                {
                    mediaPlayer.stop();
                    mediaPlayer.reset();



                }
            }

调用
mediaPlayer.reset()
mediaPlayer
将进入空闲状态。 对于播放,您应该在开始之前进行初始化以准备

您可以在此处检查mediaplayer状态:
.

而且您可能不需要
stop()
pause()
可能就足够了,这意味着您可以在想要继续播放时调用
play()

试试这个

@Override
public void onCheckedChanged(CompoundButton arg0, final boolean isChecked) {
    // TODO Auto-generated method stub
     new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            if(isChecked) {
                mediaPlayer.setDataSource(url);
                mediaPlayer.prepare();
                mediaPlayer.start();
            }
            else {
                mediaPlayer.stop();
                mediaPlayer.reset();
            }
        }
您必须在完成歌曲/播放歌曲时调用onDestroy()medthod。 你可以从我的实时代码中得到帮助

public class RingtonePlayingService extends Service {
    public static MediaPlayer mediaPlayer;
    public static Context context;

    @SuppressWarnings("deprecation")
    @Override
    public void onCreate() {
        super.onCreate();

        context = getApplicationContext();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            mediaPlayer = new MediaPlayer();
            // this is important.
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);

            try {
                // Uri ringerUri = RingtoneManager.getActualDefaultRingtoneUri(
                // getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
                mediaPlayer.setDataSource(context,
                        Settings.System.DEFAULT_RINGTONE_URI);
                // mediaPlayer.setDataSource(context, ringerUri);

                mediaPlayer.setLooping(true);
                mediaPlayer.prepare();
                if (SettingsManager.getInstance(context).getFinishCall()) {

                } else {
                    mediaPlayer.start();
                }

            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        return START_NOT_STICKY;
    }


    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        TTcall.onDestroyr();
        if (mediaPlayer != null) {

            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
                mediaPlayer.stop();
                mediaPlayer = null;
            }

        }
    }

}

我希望你能从上面的代码中得到帮助。请试着像这样使用。谢谢

老问题,但我是在找这个的时候偶然发现的。重新启动前,只需使用暂停停止,然后使用seekTo(0):

mediaPlayer.seekTo(0);
mediaPlayer.start();
无需每次都重新准备录音机即可工作

mediaPlay.seek(0);
mediaPlay.pause();

对我来说没问题。

我想我应该更清楚一些。我想停止流,然后在活动位置重新开始。OP想重新开始,而不是从停止的位置继续播放。根据记忆,只需重新开始。你不需要寻找,就像一个符咒!
public void playButton (View view){

        if (isActive == false){
            mediaPlayer.start();
            isActive = true;
        }else{
            mediaPlayer.seekTo(0);
            mediaPlayer.start();
        }
    }