【问题标题】:How to stop MediaPlayer stream and then restart it? Android如何停止 MediaPlayer 流然后重新启动它?安卓
【发布时间】:2012-09-19 00:25:50
【问题描述】:

我正在制作一个简单的应用程序来播放在线广播流。我知道如何设置流。到目前为止,这是我的代码。它设置流并播放它。但如果我停止,我无法让它重新开始。我错过了什么明显的东西吗?

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();



                }
            }

【问题讨论】:

  • 我想我应该更清楚。我想停止流,然后在直播位置重新开始。

标签: java android media-player android-mediaplayer


【解决方案1】:

老问题,但我在寻找这个时遇到了它。只需使用 pause 停止,然后在重新启动前使用 seekTo(0):

mediaPlayer.seekTo(0);
mediaPlayer.start();

无需每次都重新准备录音机即可工作。

【讨论】:

  • 凭记忆重新开始。你不需要寻找。
【解决方案2】:

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

您可以在此处检查媒体播放器状态: http://developer.android.com/reference/android/media/MediaPlayer.html.

【讨论】:

    【解决方案3】:
    public void playButton (View view){
    
            if (isActive == false){
                mediaPlayer.start();
                isActive = true;
            }else{
                mediaPlayer.seekTo(0);
                mediaPlayer.start();
            }
        }
    

    对我来说工作正常。

    【讨论】:

    • 像魅力一样工作!
    【解决方案4】:

    试试这个

    @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();
                }
            }
    

    【讨论】:

      【解决方案5】:

      完成歌曲/播放歌曲后,您必须调用 onDestroy() 方法。 您可以从我的实时代码中获得帮助。

      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;
                  }
      
              }
          }
      
      }
      

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

      【讨论】:

        【解决方案6】:

        另外,您可能不需要stop()pause() 可能就足够了,这意味着您可以在想继续玩时拨打play()

        【讨论】:

        • OP 想要重新开始,而不是从中断的地方继续播放。
        【解决方案7】:
        mediaPlay.seek(0);
        mediaPlay.pause();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 2011-02-11
          • 1970-01-01
          相关资源
          最近更新 更多