如何在安卓系统中停止播放音乐后再次播放?

3

大家好, 我在Android上制作了一个应用程序,在其中我使用了三个单选按钮和两个按钮“播放”和“停止”。 我的问题是,当我播放歌曲时,它正常播放,但当我点击停止按钮然后再点击播放按钮时,歌曲不会播放, 该怎么办?如果有人知道,请帮帮我。 以下是我编写的代码:

 package com.mediaplayer;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MediaplayerActivity extends Activity implements OnCheckedChangeListener {

MediaPlayer song1,song2,song3;
int whatsong = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);



    RadioGroup rgMusic = (RadioGroup) findViewById(R.id.radioGroup1);

    song1 = MediaPlayer.create(MediaplayerActivity.this, R.raw.fluet);
    song2 = MediaPlayer.create(MediaplayerActivity.this, R.raw.mogra_na_phool);
    song3 = MediaPlayer.create(MediaplayerActivity.this, R.raw.airtel);


    Button bPlay = (Button) findViewById(R.id.bPlay);
    Button bStop = (Button) findViewById(R.id.bStop);

    rgMusic.setOnCheckedChangeListener(this);

    bPlay.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {           

            if(song1.isPlaying())
            {
                song1.pause();
                song1.seekTo(0);
            }

            if(song2.isPlaying())
            {
                song2.pause();
                song2.seekTo(0);
            }

            if(song3.isPlaying())
            {
                song3.pause();
                song3.seekTo(0);
            }

            switch (whatsong) {

            case 1:
                try {
                    song1.prepare();
                } catch (IllegalStateException e) {                 
                    e.printStackTrace();
                } catch (IOException e) {                   
                    e.printStackTrace();
                }
                song1.start();
                break;  

            case 2:
                try {
                    song2.prepare();
                } catch (IllegalStateException e) {                 
                    e.printStackTrace();
                } catch (IOException e) {                   
                    e.printStackTrace();
                }
                song2.start();
                break;

            case 3:
                try {
                    song3.prepare();
                } catch (IllegalStateException e) {                     
                    e.printStackTrace();
                } catch (IOException e) {               
                    e.printStackTrace();
                }
                song3.start();
                break;
            }
        }
    });

    bStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {       

            switch (whatsong) {

            case 1:
                song1.stop();
                break;  

            case 2:
                song2.stop();
                break;

            case 3:
                song3.stop();
                break;
            }           
        }
    });                                      
}

@Override
public void onCheckedChanged(RadioGroup group, int rbId) {      

    switch (rbId) {
    case R.id.rbMusic1:
        whatsong = 1;           
        break;
    case R.id.rbMusic2:
        whatsong = 2;           
        break;
    case R.id.rbMusic3:
        whatsong = 3;           
        break;

    }

}

}

4个回答

2

现在使用这个编辑过的代码。这段代码将会帮助你。如果它没有正常运行,请告诉我。

package com.mediaplayer;

import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MediaplayerActivity extends Activity implements OnCheckedChangeListener {

MediaPlayer song1;
int whatsong = 0;

private ArrayList<Integer> songIds;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);



    RadioGroup rgMusic = (RadioGroup) findViewById(R.id.radioGroup1);


    songIds=new ArrayList<Integer>();

    songIds.add(R.raw.fluet);
    songIds.add(R.raw.mogra_na_phool);
    songIds.add(R.raw.airtel);

    song1 = MediaPlayer.create(Nothing.this, R.raw.fluet);


    Button bPlay = (Button) findViewById(R.id.bPlay);
    Button bStop = (Button) findViewById(R.id.bStop);

    rgMusic.setOnCheckedChangeListener(this);

    bPlay.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {           



            if(song1!=null)
            {
               song1.release();
            }


            switch (whatsong) {

            case 1:
                try {
                    song1 = MediaPlayer.create(Nothing.this, songIds.get(0));
                    song1.prepare();
                } catch (IllegalStateException e) {                 
                    e.printStackTrace();
                } catch (IOException e) {                   
                    e.printStackTrace();
                }
                song1.start();
                break;  

            case 2:
                try {
                    song1 = MediaPlayer.create(Nothing.this, songIds.get(1));
                    song1.prepare();
                } catch (IllegalStateException e) {                 
                    e.printStackTrace();
                } catch (IOException e) {                   
                    e.printStackTrace();
                }
                song1.start();
                break;

            case 3:
                try {
                    song1 = MediaPlayer.create(Nothing.this, songIds.get(2));
                    song1.prepare();
                } catch (IllegalStateException e) {                     
                    e.printStackTrace();
                } catch (IOException e) {               
                    e.printStackTrace();
                }
                song1.start();
                break;
            }
        }
    });

    bStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {       

           if(song1!=null){
               song1.release();
           }
        }
    });                                      
}

@Override
public void onCheckedChanged(RadioGroup group, int rbId) {      

    switch (rbId) {
    case R.id.rbMusic1:
        whatsong = 1;           
        break;
    case R.id.rbMusic2:
        whatsong = 2;           
        break;
    case R.id.rbMusic3:
        whatsong = 3;           
        break;

    }

}

}

感谢您回答Ilango。正如您告诉我在song.stop()之后插入song.release(),我尝试了这个方法,但是它给我报错(应用程序MediaPlayer意外停止),并且我从developer.android.com上读到,如果我们释放歌曲,它将进入END状态,没有办法从END状态重新开始播放歌曲。所以请再给我一个解决方案。再次感谢。 - Jayesh
非常感谢您,Ilango,我已经得到了解决我的问题的方法。您提供的代码完全有效。再次感谢。 - Jayesh
嗨,Ilango,当停止按钮被点击时,您刚刚发布了歌曲,当再次点击播放按钮时,您又创建并准备了歌曲,但是有没有不释放和创建歌曲就能执行相同操作的方法? - Jayesh
嗨,在播放媒体文件后,如果您想在此之前播放另一个文件,则必须释放媒体播放器。这是播放媒体文件时的良好实践。有关更多信息,请参见http://developer.android.com/reference/android/media/MediaPlayer.html#release(%28%29)。如果以上代码可以正常工作,请接受此答案,这样其他人就可以使用此代码。谢谢。 - ilango j
是的,我只接受你的回答,其他答案都不正确,所以我接受你的回答。但我想知道是否有任何方法可以在不释放和创建歌曲的情况下执行相同的操作?因为如果每次点击播放按钮时都要创建它,那么执行程序需要更多时间,这会影响速度,所以我想询问第二种方式。 - Jayesh

0

这个问题是因为你只检测是否正在播放歌曲?但你还需要检测它是真还是假?

例如::

if(song1.isPlaying()==true)
 {
    song1.pause(); //or
    song1.stop():
 }
 else{
       song1.start();
     }

更新

为了暂停媒体播放器,我使用了...

Mediaplayer.pause();
length=Mediaplayer.getCurrentPosition();

而恢复播放器从最近停止的位置是通过......

Mediaplayer.seekTo(length);
Mediaplayer.start();

谢谢回答,尼克。@尼克如果(song1.isPlaying()==true)与if(song1.isPlaying())相同,你注意到我在bPlay(播放按钮)的onclick事件中编写了该代码,而你告诉我要使用song1.stop()停止歌曲。我不想在bPlay事件中停止歌曲,为了停止播放歌曲,我在bStop(停止按钮)的onclick事件中编写了代码。那段代码没有问题。我请求你制作一个Android示例并运行它,然后告诉我。 - Jayesh
你的回答对我没有帮助,但还是谢谢你的回答。 - Jayesh
首先,在Android中,MediaPlayer没有“push”方法,也没有“resume”方法,请给我一个合适的答案,不要想象并回答。 - Jayesh
你的代码是正确的,但我有一个问题,那就是我们如何找出歌曲处于暂停状态,也就是说,通过编码,我们如何知道歌曲处于暂停状态?例如,如果我们想知道歌曲是否已经开始播放,那么我们可以使用mediaplayer.isPlaying(),那么暂停状态又该怎么办呢? - Jayesh
假设您的最大持续时间为100,最小为0,则如果(持续时间为0或更低),则{} else {}。 - Nikunj Patel
显示剩余2条评论

0

要暂停和恢复媒体播放器,您可以使用这个。我认为它会对您有所帮助。

if(song1.isPlaying()==true)
{
   Mediaplayer.pause();
   length=Mediaplayer.getCurrentPosition();
}

else
{
  Mediaplayer.seekTo(length);
  Mediaplayer.start();
}

0
         mp.stop();
            try {
                mp.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mp.seekTo(0);

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