2017-12-18 8 views
0

ストリームミュージックプレーヤーを作成しました。しかし、私は音楽やプレスを再生すると、当時の音楽が停止します私は私のアプリ といくつかのマイナーな問題は、私にこの問題の解決策を教えてくださいしていると私は1よりproblem.Pleaseは、それが何の曲が終了したときに私は私に教えてくれてい自動的に次の曲を再生しません。そして曲が終了したら、私は次の曲を演奏しようとしていて、その後アプリは停止します。ここに私のコードはバックミュージックを押すと停止する

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

あなたのプレーヤーのコードでは、活動の内部で実行し、戻るボタンを押したときに、活動は停止をプレイし、バックグラウンドに行きます。

正しい解決策は、Androidサービス、簡単に作成することです:androidManifestに登録

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() 
     ... 
    } 

を:

<service 
    android:name=".PlayerService" 
    android:exported="false" > 
</service> 

とあなたのApplicationクラスの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

あなたの2番目の質問に答えると、あなたはオーバーライド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 / –

関連する問題