【问题标题】:Android Media Player Wont Play After StopAndroid 媒体播放器停止后无法播放
【发布时间】:2013-04-06 18:21:42
【问题描述】:

我有 5 首歌曲的音乐播放列表。我只希望播放和停止按钮只要我在应用程序中工作。而且我可以在我想停止音乐的时候停止音乐并开始另一个音乐。

现在这是如何工作的...音乐在 PLAY 按钮上播放,当我单击 STOP 按钮时它停止,但是我想再次播放其他歌曲或同一首歌曲,没有任何反应。请帮忙。

public class glavna extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_main);



    final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.pj1);
    final MediaPlayer MPRadio2 = MediaPlayer.create(this, R.raw.pj2);
    final MediaPlayer MPRadio3 = MediaPlayer.create(this, R.raw.pj3);
    final MediaPlayer MPRadio4 = MediaPlayer.create(this, R.raw.pj4);
    final MediaPlayer MPRadio5 = MediaPlayer.create(this, R.raw.pj5);

    final RadioButton rb1, rb2, rb3, rb4, rb5;      

    rb1 = (RadioButton) findViewById(R.id.radio1);
    rb2 = (RadioButton) findViewById(R.id.radio2);
    rb3 = (RadioButton) findViewById(R.id.radio3);
    rb4 = (RadioButton) findViewById(R.id.radio4);
    rb5 = (RadioButton) findViewById(R.id.radio5);


    Button btn = (Button) findViewById(R.id.buttonplay);
    Button btnStop = (Button) findViewById(R.id.buttonStop);

    btnStop.setOnClickListener(new View.OnClickListener() {

    public void onClick(View b){

        MPRadio1.stop();
        MPRadio2.stop();
        MPRadio3.stop();
        MPRadio4.stop();
        MPRadio5.stop();


    };
    });


    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub



            if(rb1.isChecked())
            {       

            MPRadio1.start();

            }
        else
            {
            if(rb2.isChecked())
            {

                MPRadio2.start();
            }
                else
                {
                    if(rb3.isChecked())
                    {
                    MPRadio3.start();

                }
                    else
                    {
                        if(rb4.isChecked())
                        {
                        MPRadio4.start();

                    }
                        else
                        {
                            if(rb5.isChecked())
                            {
                            MPRadio5.start();

                            }

                        }   
                    }
                }
            };
        }
    }

        );}}

【问题讨论】:

    标签: android audio media-player playback


    【解决方案1】:

    重新播放歌曲重置媒体播放器,再次设置数据源并开始

    mp.reset();
    mp.setDataSource(MEDIA_PATH);
    mp.prepare();
    mp.start();
    

    【讨论】:

    • 我确定这是正确的,但文档中显示的状态图似乎不支持此断言。我觉得 MediaPlayer API 总体上设计不佳。
    • 如果歌曲循环播放怎么办?如何重置?
    【解决方案2】:

    当停止后按下播放按钮时,播放按钮永远不起作用--对于这个问题,我们可以在停止按钮中再次创建对象。 例如;-stop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(mPlayer.isPlaying())
                mPlayer.stop();
                mPlayer  = MediaPlayer.create(mediaplayeractivity.this, R.raw.adidas);
            }
        });}
    

    【讨论】:

      【解决方案3】:

      当您点击停止按钮后播放无法正常工作时...只需将您的 mediaplayer 对象作为应该修复它的对象数组..

      final MediaPlayer[] mediaPlayer = {MediaPlayer.create(getApplicationContext(), R.raw.song_name)};
      
      stop.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
      
                  mediaPlayer[0].stop();
      
                  mediaPlayer[0] = MediaPlayer.create(getApplicationContext(),R.raw.song_name);
              }
          });
      

      【讨论】:

      • 这似乎是一个非常奇怪的解决方案。拥有一组 MediaPlayer 对象有什么好处?
      • 我不确定这是如何工作的 .. 但无论如何我们将只使用一个 MediaPlayer 对象,即 .. mediaPlayer[0] @Seabass77
      • 嗯,我不认为你应该拥有多个媒体播放器......但如果它有效并且你没有看到任何重大的性能问题,那么它猜这一切都很好编辑:我的意思是,如果你想播放 2 首不同的歌曲,你应该暂停并启动同一个媒体播放器
      【解决方案4】:

      您可以在此处查看此演示示例, 我正在循环播放音频 clicp 并在 Button Cick 上停止并再次播放。

      package com.Test.demo;
      
      import androidx.appcompat.app.AppCompatActivity;
      
      import android.content.DialogInterface;
      import android.media.MediaPlayer;
      import android.os.Build;
      import android.os.Bundle;
      import android.os.CountDownTimer;
      import android.util.Log;
      import android.view.View;
      import android.widget.Button;
      
      import java.text.SimpleDateFormat;
      import java.util.ArrayList;
      import java.util.Date;
      import java.util.Timer;
      import java.util.TimerTask;
      import java.util.concurrent.Executors;
      import java.util.concurrent.ScheduledExecutorService;
      import java.util.concurrent.ScheduledFuture;
      
      import static java.util.concurrent.TimeUnit.SECONDS;
      
      public class MainActivity extends AppCompatActivity {
      
          Button scan;
          Button stop;
      
          MediaPlayer mp;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              scan=(Button)findViewById(R.id.scan);
              stop=(Button)findViewById(R.id.stop);
              mp = MediaPlayer.create(this, R.raw.trackeralertseparation);
              scan.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      mp.setLooping(true);
                      mp.start();
                      mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                          @Override
                          public void onCompletion(MediaPlayer mediaPlayer) {
                              mp.reset();
                              mp.release();
                          }
                      });
                  }
              });
      
              stop.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
      
                      if(mp.isPlaying()){
                          mp.stop();
                      }
                      mp=MediaPlayer.create(getApplicationContext(), R.raw.trackeralertseparation);
                  }
              });
          }
      }
      

      设计文件在下方,带有简单的按钮。

      <?xml version="1.0" encoding="utf-8"?>
          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              tools:context=".MainActivity">
      
      
              <Button
                  android:id="@+id/scan"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentTop="true"
                  android:layout_centerHorizontal="true"
                  android:layout_marginTop="195dp"
                  android:gravity="center_vertical"
                  android:padding="4dp"
                  android:text="Play"
                  android:textSize="26sp"
                  android:textStyle="bold" />
      
              <Button
                  android:id="@+id/stop"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="stop"
                  android:padding="4dp"
                  android:layout_centerInParent="true"
                  android:textSize="26sp"
                  android:textStyle="bold"/>
      
          </RelativeLayout>
      

      【讨论】:

        【解决方案5】:

        当你停止音乐时,必须在创建时再次声明歌曲。

        使用 Android Studio 的简单方法:

        mPlayer  = MediaPlayer.create(mediaplayeractivity.this, R.raw.adidas);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多