2016-08-09 18 views
0

Vor allem, Hier ist mein Code. Ich habe meine Probleme und Gedanken weiter unten erläutert: -Wie spiele ich den nächsten Song in Android (MediaPlayer)?

listView.setOnItemClickListener 
      (new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 



         int Current_Song; 
         Songs song = Song.get(i); 

         //If mediaPlayer is not used before, this will make oldsong as present song. 
         if (Old_Song == -326523) { 
          Old_Song = song.getSong(); 
         } 

         Current_Song = song.getSong(); 

         ImageView IVP_P = (ImageView) findViewById(R.id.P_PImage); 


         //If mediaPlayer is paused. 
         if (IsPaused) { 
          P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 
          //If the song paused is same as the new song. 
          if (Current_Song == Old_Song) { 

           mediaplayer.start(); 
          } 

          //If the song Paused is not the new song. 
          else { 
           if (mediaplayer != null) { 
            mediaplayer.release(); 
            mediaplayer = null; 
           } 

           int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); 

           if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
            mediaplayer = mediaplayer.create(SongsListActivity.this, song.getSong()); 
            Old_Song = song.getSong(); 
            NameD.setText(song.getNameOfSong()); 
            RateD.setText(song.getDeveloperRate()); 
            ImageD.setImageResource(song.getImage()); 
            mediaplayer.start(); 
            mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
             @Override 
             public void onCompletion(MediaPlayer mediaPlayer) { 
              P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
              IsPaused = true; 
             } 
            }); 
           } 
          } 
          IsPaused = false; 

         } else if (mediaplayer != null) { 
          //If mediaPlayer is already Playing a song. 
          if (mediaplayer.isPlaying()) { 
           P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
           mediaplayer.pause(); 
           IVP_P.setImageResource(R.drawable.ic_play_arrow_black_24dp); 
           IsPaused = true; 
          } 
         } 

         //If mediaPlayer is used for first time and if mediaPlayer is neither paused 
         else { 

          if (mediaplayer != null) { 
           mediaplayer.release(); 
           mediaplayer = null; 
          } 

          int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); 

          if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
           mediaplayer = mediaplayer.create(SongsListActivity.this, song.getSong()); 
           Old_Song = song.getSong(); 
           NameD.setText(song.getNameOfSong()); 
           RateD.setText(song.getDeveloperRate()); 
           ImageD.setImageResource(song.getImage()); 
           mediaplayer.start(); 
           P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 

           mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
            @Override 
            public void onCompletion(MediaPlayer mediaPlayer) { 
             P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
             IsPaused = true; 
             P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 

            } 
           }); 
          } 
         } 

        } 

      } 
      ); 

Hier ist meine App zeigt eine Liste von Songs mit Listview und Adapter. Die Details der Songs werden in einer arrayList gespeichert (wie Sie alle sehen können). Wenn ein Element angeklickt wird, erhält es die Position dieses Elements, verweist dann auf das entsprechende Element der arrayList, ruft den Speicherort des entsprechenden Songs und dann ab spielt dieses Lied. Was ich will ist, dass, wenn ein Lied vorbei ist, und die Methode onCompletion() aufgerufen wird, möchte ich den Wert von i (siehe in der 4. Zeile meines Codes) um eins erhöhen und dann den entsprechenden Song starten.

Ich will das goto und Etikett mit tun, aber es funktioniert nicht. (I-Label setze in onItemClick ganz am begening, zu seinem Ende und geht in der onCompletion.)

wie kann ich Goto und Label?

Oder gibt es eine andere EFFIZIENTE Methode, um meine Aufgabe zu erfüllen?

BITTE HELFEN SIE MICH !!!!!!!!!!!!!!!!!!!!!!!!

Antwort

0

So haben Sie einen Index aller Songs in den Wiedergabelisten erstellen und dann

if(currentSongIndex < (songsList.size() - 1)){ 
       playSong(currentSongIndex + 1); 
       currentSongIndex = currentSongIndex + 1; 
      }else{ 
       // play first song 
       playSong(0); 
       currentSongIndex = 0; 
      } 

überprüfen Weitere Sie diesen Link überprüfen http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

+0

ich diese Seite sah, aber ich war nicht in der Lage zu verstehen, es richtig. Kannst du mir sagen, was ich im obigen Code tun kann? –

+0

Sorry für Unannehmlichkeiten, aber ich bin ein Nieve Programmer –

+0

In Ihrer OnCompletion-Funktion pausieren Sie Ihren Player stattdessen versuchen Lieder Song = Song.get (i + 1); –