安卓媒体播放器停止后无法播放

10

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

                            }

                        }   
                    }
                }
            };
        }
    }

        );}}
7个回答

10

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

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

我确定这是正确的,但在文档中呈现的状态图似乎并不支持这个断言。我觉得MediaPlayer API 在总体上设计得很差。 - IcedDante
1
如果歌曲循环播放怎么办?如何重置? - Anand Savjani

1

当停止后再按播放按钮时,播放按钮永远不起作用——针对这个问题,我们可以在停止按钮中重新创建对象。 例如: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);
        }
    });}

0

那么你应该使用暂停函数而不是停止函数

mediaplayer.pause();

通过这个,你可以轻松地再次播放它。

mediaplayer.start();

0
简单的解决办法是不要调用stop()函数。而是调用下面的两个函数。
    mp.seekTo(0)
    mp.pause()

这是Kotlin代码,Java代码也是一样的,只是每行后面加上分号。 这里的mp es是mediaPlayer对象的引用。seekTo(0)会将媒体播放器定位到第一个位置,pause()函数会暂停播放器。当用户再次点击播放时,它将正常播放,没有任何问题。

0

您可以在此处检查演示示例, 我正在循环播放音频片段,并在按钮单击时停止并重新播放。

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>

-1

当你点击停止按钮后,播放器无法正常工作时...只需将你的媒体播放器对象设置为一个对象数组即可解决问题。

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对象数组有什么好处? - Seabass77
我不确定这是如何工作的..但无论如何,我们将只使用一个MediaPlayer对象,即mediaPlayer [0] @Seabass77 - Allan_Aj5
我认为在任何情况下都不应该有多个媒体播放器存在...但如果它能够正常工作,而且你没有看到任何明显的性能问题,那么一切都还好。编辑:我的意思是,如果你想播放两首不同的歌曲,你应该暂停并重新启动同一个媒体播放器。 - Seabass77

-1

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

使用Android Studio的简单方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接