2017-12-18 23 views
0

Ich habe einen Stream Music Player erstellt. Aber ich habe ein paar kleinere Probleme mit meiner App Wenn ich Musik spiele und drücke dann die Musik wird gestoppt bitte sagen Sie mir die Lösung für dieses Problem und ich habe noch ein Problem. Bitte sagen Sie mir, was ich mache, wenn das Lied fertig ist, tut es Das nächste Lied wird nicht automatisch abgespielt. Und wenn der Song fertig ist, habe ich versucht, den nächsten Song abzuspielen, dann wird die App gestoppt. hier ist mein codeWenn ich zurück drücke Musik gestoppt

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

wenn jemand weiß dann bitte helfen sie mir.

+0

Bitte Service verwenden, anstatt Aktivität für Musik-Player Klasse mit – Shubham

Antwort

1

Ihr Player-Code wird innerhalb der Aktivität ausgeführt, und wenn die Zurück-Taste gedrückt wird, geht die Aktivität in den Hintergrund und die Wiedergabe stoppt.

Die richtige Lösung ist ein Android-Service, kurz zu erstellen:

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

es in AndroidManifest registrieren:

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

und es starten, zum Beispiel in in onCreate Ihrer Anwendungsklasse:

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

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

Weitere Informationen zum Erstellen von Diensten finden Sie in diesem Artikel: https://developer.android.com/training/run-background-service/create-service.html

Beantworten Sie Ihre zweite Frage, Sie hatten Recht auf Override onCompletion Methode zu denken. Wie üblich sieht das so sollte (in Pseudo-Code):

@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

Sie bei Volltext Beispiel hier einen Blick darauf werfen können: https://github.com/dmllr/IdealMedia / –

Verwandte Themen