Android 当我按下后退键时,音乐就会停止

Android 当我按下后退键时,音乐就会停止,android,Android,我已经创建了一个流音乐播放器。但是我的应用程序有一些小问题 当我播放音乐并按“上一步”时,音乐会停止。请告诉我此问题的解决方案,我还有一个问题。请告诉我当歌曲结束时我该怎么做。它不会自动播放下一首歌曲。当歌曲结束后,我试图播放下一首歌曲,然后应用程序停止。这是我的密码 public void get() { seekBarProgress.setMax(99); // It means 100% .0-99 seekBarProgress.setOnTouchListener

我已经创建了一个流音乐播放器。但是我的应用程序有一些小问题 当我播放音乐并按“上一步”时,音乐会停止。请告诉我此问题的解决方案,我还有一个问题。请告诉我当歌曲结束时我该怎么做。它不会自动播放下一首歌曲。当歌曲结束后,我试图播放下一首歌曲,然后应用程序停止。这是我的密码

  public void get()
{
    seekBarProgress.setMax(99); // It means 100% .0-99
    seekBarProgress.setOnTouchListener(this);
    mMediaPlayer.setOnBufferingUpdateListener(this);
    mMediaPlayer.setOnCompletionListener(this);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            //getting the upload
            Upload upload = uploadList.get(i);

            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.stop();
                mMediaPlayer.reset();
                seekBarProgress.setProgress(0);
            }

            try {
                mMediaPlayer.setDataSource(upload.getUrl());
                mMediaPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}
   private void primarySeekBarProgressUpdater() {
    seekBarProgress.setProgress((int)(((float)mMediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100));
    if (mMediaPlayer.isPlaying()) {
        Runnable notification = new Runnable() {
            public void run() {
                primarySeekBarProgressUpdater();
            }
        };
        handler.postDelayed(notification,1000);
    }
}

 @Override
    public boolean onTouch(View v, MotionEvent event) {
     if(v.getId() == R.id.length){
          if(mMediaPlayer.isPlaying()){
            SeekBar sb = (SeekBar)v;
            int playPositionInMillisecconds = (mediaFileLengthInMilliseconds 
     / 100) * sb.getProgress();
           mMediaPlayer.seekTo(playPositionInMillisecconds);
        }
    }
    return false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {

    seekBarProgress.setSecondaryProgress(percent);
}
@Override
public void onCompletion(MediaPlayer mp) {
// Help me also here 

}
 private void togglePlayPause() {
    if (mMediaPlayer.isPlaying()) {
        mMediaPlayer.pause();
        mPlayerControl.setImageResource(R.drawable.ic_play);
         } else {
        mMediaPlayer.start();
        mPlayerControl.setImageResource(R.drawable.ic_pause);
        mediaFileLengthInMilliseconds = mMediaPlayer.getDuration();
        primarySeekBarProgressUpdater();
        mSelectedTrackImage.setImageResource(R.drawable.images);
    }
}
public void get()
{
seekBarProgress.setMax(99);//表示100%。0-99
seekBarProgress.setOnTouchListener(这个);
mmediplayer.setOnBufferingUpdateListener(此);
mmediplayer.setOnCompletionListener(此);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//获取上传
Upload Upload=uploadList.get(i);
if(mmediplayer.isPlaying()){
mmediplayer.stop();
mmediplayer.reset();
seekBarProgress.setProgress(0);
}
试一试{
mmediplayer.setDataSource(upload.getUrl());
mMediaPlayer.prepareAsync();
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
}
私有void primarysekbarprogressupdater(){
请参阅kbarprogress.setProgress((int)((float)mMediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100);
if(mmediplayer.isPlaying()){
Runnable通知=新的Runnable(){
公开募捐{
primarySeekBarProgressUpdater();
}
};
handler.postDelayed(通知,1000);
}
}
@凌驾
公共布尔onTouch(视图v,运动事件){
if(v.getId()==R.id.length){
if(mmediplayer.isPlaying()){
SeekBar sb=(SeekBar)v;
int PLAYPOSITIONIN毫秒=(MediaFileLengthin毫秒
/100)*某人取得进展();
mmediplayer.seekTo(播放位置毫秒);
}
}
返回false;
}
@凌驾
public void onBufferingUpdate(MediaPlayer mp,整数百分比){
参见kBarProgress.setSecondaryProgress(百分比);
}
@凌驾
完成时的公共作废(MediaPlayer mp){
//在这里也帮我
}
私有无效切换PlayPause(){
if(mmediplayer.isPlaying()){
暂停();
mPlayerControl.setImageResource(R.drawable.ic_play);
}否则{
mmediplayer.start();
mPlayerControl.setImageResource(R.drawable.ic_pause);
mediaFileLengthInMilliseconds=mMediaPlayer.getDuration();
primarySeekBarProgressUpdater();
mSelectedTrackImage.setImageResource(R.drawable.images);
}
}

如果有人知道,请帮助我。

您的播放器代码在活动中执行,当按下后退按钮时,活动进入后台,播放停止

正确的解决方案是创建一个Android服务,简而言之:

public class PlayerService extends Service implements AudioManager.OnAudioFocusChangeListener {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String action = intent.getAction();
        if (PLAY.equals(action))
            play()
        ...
    }
在androidManifest中注册它:

<service
    android:name=".PlayerService"
    android:exported="false" >
</service>
有关创建服务的信息,请参阅本文:

在回答第二个问题时,您对override
onCompletion
方法的想法是正确的。 与往常一样,它应该是这样的(在伪代码中):


您可以在这里查看全文示例:请使用服务,而不是使用音乐播放器课程的活动
@Override
public void onCreate() {
    super.onCreate();

    startService(new Intent(this, PlayerService.class));
    bindService(new Intent(this, PlayerService.class), mConnection, Context.BIND_AUTO_CREATE);
}
@Override
public void onCompletion(MediaPlayer mp) {
    if (isRepeat) {
        play(current);
    } else if (isShuffle) {
        play(random);
    } else {
        play(next);
    }
}

public void  play(index or file or stream){
    mp.reset();
    mp.setDataSource(get by index or file or stream);
    mp.prepare();
    mp.start();
}