2016-05-22 8 views
1

Ich versuche, den Player automatisch zum nächsten Titel zu wechseln, wenn das Lied vorbei ist, es folgt automatisch Klingelton muss reproduzieren. Und die aktuelle Zeit Melodien Ausgang in der texеview sollten setOnCompletionListener -nicht arbeiten, es geht nicht um den nächsten Titel, wenn der Strom beendetWie wird der Mediaplayer automatisch auf den nächsten Titel umgeschaltet?

// Variablen

 int[] soundsRawResIds = new int[]{R.raw.belarus, R.raw.russian, R.raw.japan, 
      R.raw.litva, R.raw.england, R.raw.finlandia, R.raw.france}; 

    private final Handler handler = new Handler(); 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_main); 
     initViews(); 
     currenttime=(TextView)findViewById(R.id.timeSound); 
     buttonPlayStop = (Button) findViewById(R.id.ButtonPlayStop); 

    } 
    private void initViews() { 
     mediaPlayer = MediaPlayer.create(this, soundsRawResIds[0]); 
     seekBar = (SeekBar) findViewById(R.id.seekBar); 
     seekBar.setMax(mediaPlayer.getDuration()); 
     seekBar.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       seekChange(v); 

       return false; 
      } 
     }); 
    } 


    private void seekChange(View v){ 
     if(mediaPlayer.isPlaying()){ 
      seekBar = (SeekBar)v; 
      mediaPlayer.seekTo(seekBar.getProgress()); 


     } 
    } 
    public void playAndStop(View v){ 
     if (buttonPlayStop.getText() == getString(R.string.play_str)) { 
      buttonPlayStop.setText(getString(R.string.pause_str)); 

       mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mp) { 
         index++; 
         mp.reset(); 
         if (index < soundsRawResIds.length) { 
          try { 
           AssetFileDescriptor afd = getResources().openRawResourceFd(soundsRawResIds[index]); 
           if (afd != null) { 
            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
            afd.close(); 
            mp.prepare(); 
           } 
          } catch (Exception ex) { 
           // report a crash 
          } 
         } else { 
          // done with media player 
          mp.release(); 
          mp = null; 
         } 
        } 
       }); 

       mediaPlayer.start(); 
       startPlayProgressUpdater(); 

     }else { 
      buttonPlayStop.setText(getString(R.string.play_str)); 
      mediaPlayer.pause(); 
     } 
    } 
    public void startPlayProgressUpdater() { 
     seekBar.setProgress(mediaPlayer.getCurrentPosition()); 

     if (mediaPlayer.isPlaying()) { 
      Runnable notification = new Runnable() { 
       public void run() { 
        startPlayProgressUpdater(); 
        if(seekBar.getProgress()==100){ 
         for(int index=0;index<soundsRawResIds.length;index++){ 

          index++; 
         } 
        } 

       } 
      }; 
      handler.postDelayed(notification,1000); 
     }else{ 
      mediaPlayer.pause(); 
      buttonPlayStop.setText(getString(R.string.play_str)); 
      seekBar.setProgress(0); 
     } 
    } 
} 

Mein XML-Code:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <SeekBar 
      android:layout_width="fill_parent" 
      android:progress="0" 
      android:max="100" 
      android:layout_height="wrap_content" 
      android:id="@+id/seekBar"/> 
     <Button 
      android:text="@string/play_str" 
      android:textSize="15pt" 
      android:textStyle="bold" 
      android:onClick="playAndStop" 
      android:id="@+id/ButtonPlayStop" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginRight="-3dp"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/timeSound" 
      android:textSize="30sp" 
      android:text="00:00" 
      /> 

    </LinearLayout> 

Antwort

1

Setzen Sie einen onCompletionListener auf mediaPlayer.

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mp) { 
      //custom method to play next song 
      playNextSong();   
    } 
}); 

Wiedergabe von Array einfaches Beispiel.

private String[] songPaths; 
private int playingPostion=0; 

public void play(){ 
    if(mediaPlayer==null){ 
     mediaPlayer=new MediaPlayer(); 
    }else{ 
     mediaPlayer.reset(); 
    } 
    //your array contains resource files.First convert them to a uri before submitting to the mediaPlayer 
    String uri = "android.resource://" + getPackageName() + "/"+songPaths[playingPosition]; 
    mediaPlayer.setDataSource(Uri.parse(uri)); 
    mediaPlayer.prepare(); 
    mediaPlayer.start(); 
    //prepare your textviews and seekbar 

    //prepare the player to play next song from array after completing current song 
    if(playingPosition==0){ 
    if(songPaths.length>1){ 
     playingPosition++; 
    } 
    }else if((playingPosition+1)==songPaths.length){ 
     playingPosition=0; 
    }else{ 
     playingPostion++; 
    } 

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        play(); 
        //do anything else you desire 
       } 
      }); 
} 

Der obige Code dient nur als Beispiel. Verwenden Sie Ihre Threads und versuchen Sie, Anweisungen richtig zu erfassen.

+0

ich habe diese Methode hinzugefügt, aber mein Song wiederholt sich, wenn gestoppt. Ich versuche, Musik von einem Array zu hören – upward

+0

Ich aktualisierte die Antwort. Würde das helfen? –

+0

Sie erstellen einen neuen Player MediaPlayer mp erro -38 – upward

Verwandte Themen