2017-12-18 59 views
0

我創建了一個流音樂播放器。但我有一些小問題與我的應用程序 當我播放音樂,然後按回音樂停止,請告訴我解決這個問題,我還有1個問題。請告訴我,當歌曲完成時,我做了什麼不自動播放下一首歌曲。當歌曲完成後,我試圖播放下一首歌曲,然後應用程序停止播放。這裏是我的代碼當我按回音樂停止

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

如果有人知道那麼請幫助我。

+0

請使用服務,而不是使用活動的音樂播放器類 – Shubham

回答

1

您的播放器代碼在Activity中執行,當按下Back按鈕時,活動進入後臺,播放停止。

正確的解決方案是創建一個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> 

並啓動它,例如在應用程序類的onCreate

@Override 
public void onCreate() { 
    super.onCreate(); 

    startService(new Intent(this, PlayerService.class)); 
    bindService(new Intent(this, PlayerService.class), mConnection, Context.BIND_AUTO_CREATE); 
} 

請參閱這篇文章創建服務:https://developer.android.com/training/run-background-service/create-service.html

回答你的第二個問題,你正在考慮覆蓋onCompletion方法。 像往常一樣,它應該是這樣的(僞代碼):

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

你可以看看全文例如這裏:https://github.com/dmllr/IdealMedia / –