2017-10-03 1 views
1

Je suis nouveau sur le développement android.J'ai créé une application de lecteur audio pour jouer des chansons de la carte SD, son fonctionnement bien et la chanson est jouée mais quand je clique sur le bouton suivant, chanson doesn Ne changez pas et la même piste continue de jouer.Button est cliquable mais la chanson ne change pas en cliquant dessus.Comment puis-je le réparer? toute sorte d'aide est appréciée, merci.impossible de jouer la chanson suivante en cliquant sur un bouton

public class PlayListActivity extends Activity { 

    private String[] mAudioPath; 
    private MediaPlayer mMediaPlayer; 
    private String[] mMusicList; 
    int currentPosition = 0; 
    private List<String> songs = new ArrayList<>(); 

    MediaMetadataRetriever metaRetriver; 
    byte[] art; 
    ImageView album_art; 
    TextView album; 
    TextView artist; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_play_list); 

     mMediaPlayer = new MediaPlayer(); 
     ListView mListView = (ListView) findViewById(R.id.list); 

     mMusicList = getAudioList(); 

     ArrayAdapter<String> mAdapter = new ArrayAdapter<>(this, 
       android.R.layout.simple_list_item_1, mMusicList); 
     mListView.setAdapter(mAdapter); 

     mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, int arg2, 
            long arg3) { 

       try { 
        playSong(mAudioPath[arg2]); 
       } catch (IllegalArgumentException e) { 
        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 
    } 

    private String[] getAudioList() { 
     final Cursor mCursor = getContentResolver().query(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       new String[]{MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA}, null, null, 
       "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC"); 

     int count = mCursor.getCount(); 

     String[] songs = new String[count]; 
     mAudioPath = new String[count]; 
     int i = 0; 
     if (mCursor.moveToFirst()) { 
      do { 
       songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 
       mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); 
       i++; 
      } while (mCursor.moveToNext()); 
     } 

     mCursor.close(); 

     return songs; 
    } 


    private void playSong(String path) throws IllegalArgumentException, 
      IllegalStateException, IOException { 

     setContentView(R.layout.activity_android_building_music_player); 
     Log.d("ringtone", "playSong :: " + path); 

     mMediaPlayer.reset(); 
     mMediaPlayer.setDataSource(path); 
//mMediaPlayer.setLooping(true); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.start(); 
     acv(path); 
     abc(); 
     cde(); 
    } 

    public void acv(String path) { 
     getInit(); 

     metaRetriver = new MediaMetadataRetriever(); 
     metaRetriver.setDataSource(path); 
     try { 
      art = metaRetriver.getEmbeddedPicture(); 
      Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length); 
      album_art.setImageBitmap(songImage); 
      album.setText(metaRetriver 
        .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); 
      artist.setText(metaRetriver 
        .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); 
     } catch (Exception e) { 
      album_art.setBackgroundColor(Color.GRAY); 
      album.setText("Unknown Album"); 
      artist.setText("Unknown Artist"); 
     } 

    } 

    public void getInit() { 
     album_art = (ImageView) findViewById(R.id.coverart1); 
     album = (TextView) findViewById(R.id.Album); 
     artist = (TextView) findViewById(R.id.artist_name); 
    } 


    public void abc() { 
     ImageButton btnPlay1 = (ImageButton) findViewById(R.id.btnPlay1); 
     btnPlay1.setBackgroundColor(Color.TRANSPARENT); 
     btnPlay1.setOnClickListener(
       new View.OnClickListener() { 
        public void onClick(View v) { 
         if (mMediaPlayer.isPlaying()) { 
          mMediaPlayer.pause(); 
         } else { 
          mMediaPlayer.start(); 
         } 

        } 
       }); 
    } 




public void cde() { 
    ImageButton btnNext = (ImageButton) findViewById(R.id.btnNext); //this is the button for playing next song. 
    btnNext.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      try { 
         currentPosition=currentPosition+1; 
        playSong(path + songs.get(currentPosition)); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }); 
} 
} 

Répondre

1

Essayez ce code:

public void next() { 
     ImageButton btnNext = (ImageButton) findViewById(R.id.btnNext); 
     btnNext.setOnClickListener(
       new View.OnClickListener() { 
        public void onClick(View view) { 
         temp = temp + 1; 
         try { 
          playSong(mAudioPath[temp]); 
         } catch (Exception er) { 
          er.printStackTrace(); 
         } 

        } 
       } 
     ); 
    } 

Ne pas oublier de déclarer la méthode next() dans playsong()