2017-09-21 39 views
-1

我想添加一個automatically play next song選項,當我的Android應用程序完成前一個。我嘗試了很多方法,但都失敗了。請給出完整的代碼,而不是提示。 下面是完整的類:如何在我的Android應用中添加自動播放下一首歌曲選項?

public class AlbumPlayActivity extends AppCompatActivity implements View.OnClickListener { 
private List<SongListModel> songs = new ArrayList<SongListModel>(); 
private SongAdapter songAdapter; 
String URL_SONGS; 
String URL_ALBUM_ART; 
String URL_ALBUM_ART_BIG; 
String URL_ALBUM_ART_BLUR; 
String URL_MP3; 
ListView lvSongs; 
MediaPlayer mediaPlayer; 
NetworkImageView nivAlbumArt,nivAlbumArtBlur; 
private double startTime = 0; 
private double finalTime = 0; 
private Handler myHandler = new Handler(); 

public int currentlyPlaying; 

private int forwardTime = 5000; 
private int backwardTime = 5000; 
private SeekBar seekbar; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
public int oneTimeOnly = 0; 
int songID = 0; 
ImageButton ibPrev, ibPlay, ibPause, ibNext, ibFastForward, ibFastRewind; 
TextView tvStartTime, tvEndTime; 
RelativeLayout llList; 
ImageButton ibShare; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_album_play); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    URL_SONGS = getIntent().getExtras().getString("URL_SONG"); 
    URL_ALBUM_ART = getIntent().getExtras().getString("URL_ALBUM_ART"); 
    URL_ALBUM_ART_BIG = getIntent().getExtras().getString("URL_ALBUM_ART_BIG"); 
    URL_ALBUM_ART_BLUR = getIntent().getExtras().getString("URL_ALBUM_ART_BLUR"); 
    imageLoader = AppController.getInstance().getImageLoader(); 
    lvSongs = (ListView) findViewById(R.id.lvSongList); 
    nivAlbumArt = (NetworkImageView) findViewById(R.id.nivAlbumArt); 
    ibNext = (ImageButton) findViewById(R.id.ibNext); 
    ibPlay = (ImageButton) findViewById(R.id.ibPlay); 
    ibFastRewind = (ImageButton) findViewById(R.id.ibFastRewind); 
    ibFastForward = (ImageButton) findViewById(R.id.ibFastForward); 
    ibPrev = (ImageButton) findViewById(R.id.ibPrev); 
    seekbar = (SeekBar) findViewById(R.id.seekBar); 
    tvStartTime = (TextView) findViewById(R.id.tvStartTime); 
    tvEndTime = (TextView) findViewById(R.id.tvEndTime); 
    llList = (RelativeLayout)findViewById(R.id.llList); 
    ibShare = (ImageButton)findViewById(R.id.ibShare); 
    seekbar.setClickable(false); 
    ibNext.setOnClickListener(this); 
    ibPlay.setOnClickListener(this); 
    ibPrev.setOnClickListener(this); 
    ibFastRewind.setOnClickListener(this); 
    ibFastForward.setOnClickListener(this); 
    ibShare.setOnClickListener(this); 

    songAdapter = new SongAdapter(this, songs); 
    lvSongs.setAdapter(songAdapter); 


    loadSongs(); 

    lvSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID = position; 
      stopPlaying(); 
      URL_MP3 = "http://.../apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20"); 
      songs.get(songID).setVisible(true); 
      mediaPlayer = new MediaPlayer(); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mediaPlayer.setDataSource(URL_MP3); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        mp.start(); 
        ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 

        finalTime = mp.getDuration(); 
        startTime = mp.getCurrentPosition(); 
        if (oneTimeOnly == 0) { 
         seekbar.setMax((int) finalTime); 
         oneTimeOnly = 1; 
        } 
        tvEndTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
        ); 

        tvStartTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
        ); 

        seekbar.setProgress((int) startTime); 
        myHandler.postDelayed(UpdateSongTime, 100); 
       } 
      }); 
      mediaPlayer.prepareAsync(); 
     } 
    }); 

    seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if(mediaPlayer != null && fromUser){ 
       mediaPlayer.seekTo(progress); 
      } 
     } 
    }); 
} 

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 
     case R.id.ibPrev: 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID--; 
      if(songID<0){ 
       songID=0; 
      } 

      if (songID >= 0) { 
       startPlaying("http://.../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20")); 
       songs.get(songID).setVisible(true); 
       songAdapter.notifyDataSetChanged(); 
      } 
      break; 

     case R.id.ibPlay: 
      if (mediaPlayer.isPlaying()) { 
       if (mediaPlayer != null) { 
        mediaPlayer.pause(); 
        Log.i("Status:", " Paused"); 
        ibPlay.setImageResource(R.drawable.ic_play_circle_outline_white_48dp); 
       } 
      } else { 
       if (mediaPlayer != null) { 
        mediaPlayer.start(); 
        Log.i("Status:", " Playing"); 
        ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 
        finalTime = mediaPlayer.getDuration(); 
        startTime = mediaPlayer.getCurrentPosition(); 
        if (oneTimeOnly == 0) { 
         seekbar.setMax((int) finalTime); 
         oneTimeOnly = 1; 
        } 
        tvEndTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
        ); 

        tvStartTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
        ); 

        seekbar.setProgress((int) startTime); 
        myHandler.postDelayed(UpdateSongTime, 100); 
       } 
      } 
      break; 

     case R.id.ibShare: 
      Intent sendIntent = new Intent(); 
      sendIntent.setAction(Intent.ACTION_SEND); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, "Welcome to music radio"); 
      sendIntent.setType("text/plain"); 
      startActivity(sendIntent); 
      break; 

     case R.id.ibNext: 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID++; 
      if (songID==songs.size()){ 
       ibNext.setEnabled(false); 
      } 

      if (songID <= songs.size()) { 
       startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20")); 
       songs.get(songID).setVisible(true); 
       songAdapter.notifyDataSetChanged(); 
      } 

      break; 
     case R.id.ibFastForward: 
      int temp = (int) startTime; 

      if ((temp + forwardTime) <= finalTime) { 
       startTime = startTime + forwardTime; 
       mediaPlayer.seekTo((int) startTime); 

      } else { 
       Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     case R.id.ibFastRewind: 
      int temp1 = (int) startTime; 

      if ((temp1 - backwardTime) > 0) { 
       startTime = startTime - backwardTime; 
       mediaPlayer.seekTo((int) startTime); 

      } else { 
       Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
    } 
} 


public void loadSongs() { 

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL_SONGS, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      nivAlbumArt.setImageUrl(URL_ALBUM_ART_BIG, imageLoader); 
      Glide.with(AlbumPlayActivity.this).load(URL_ALBUM_ART_BLUR).asBitmap().into(new SimpleTarget<Bitmap>(700,300) { 
       @Override 
       public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
        Drawable drawable = new BitmapDrawable(resource); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
         llList.setBackground(drawable); 
        } 
       } 
      }); 
      for (int i = 0; i < response.length(); i++) { 
       try { 
        JSONObject jObj = response.getJSONObject(i); 
        SongListModel songModel = new SongListModel(); 

        Log.i(">>REQ", jObj.toString()); 
        songModel.setAlbum_id(jObj.getString("album_id")); 
        songModel.setCategory_id(jObj.getString("category_id")); 
        songModel.setId(jObj.getString("id")); 
        songModel.setSinger_id(jObj.getString("singer_id")); 
        songModel.setSong(jObj.getString("song")); 

        songs.add(songModel); 
        startPlaying("http://.../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20")); 
        songs.get(songID).setVisible(true); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


      } 
      songAdapter.notifyDataSetChanged(); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 
    jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(
      (int) TimeUnit.SECONDS.toMillis(20), 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    AppController.getInstance().addToRequestQueue(jsonArrayRequest); 
} 

private void startPlaying(final String position) { 
    stopPlaying(); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mediaPlayer.setDataSource(position); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
      currentlyPlaying=songID; // member field (int) 
      finalTime = mp.getDuration(); 
      startTime = mp.getCurrentPosition(); 
      ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 
      if (oneTimeOnly == 0) { 
       seekbar.setMax((int) finalTime); 
       oneTimeOnly = 1; 
      } 
      tvEndTime.setText(String.format("%d:%d", 
        TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
        TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
      ); 

      tvStartTime.setText(String.format("%d:%d", 
        TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
        TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
      ); 

      seekbar.setProgress((int) startTime); 
      myHandler.postDelayed(UpdateSongTime, 100); 
     } 
    }); 

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) { 
      if(currentlyPlaying >= songs.size()){ 

      } else { 
       startPlaying(position); 
      } 
     } 
    }); 

    mediaPlayer.prepareAsync(); 
} 



private void stopPlaying() { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer.reset(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 

     myHandler.removeCallbacks(UpdateSongTime); 
    } 
} 

@Override 
public void onBackPressed() { 
    stopPlaying(); 
    finish(); 
} 
@Override 
public boolean onCreateOptionsMenu (Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     stopPlaying(); 
     finish(); 
     return true; 
    } 

    if (id == R.id.action_home) { 
     stopPlaying(); 
     Intent intent = new Intent(AlbumPlayActivity.this,HomeActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private Runnable UpdateSongTime = new Runnable() { 
    public void run() { 
     startTime = mediaPlayer.getCurrentPosition(); 
     seekbar.setProgress((int) startTime); 
     tvStartTime.setText(String.format("%d:%d", 

       TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
       TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
           toMinutes((long) startTime))) 
     ); 

     myHandler.postDelayed(this, 100); 
    } 
}; 

}

我想在我的應用程序修改。首先,我提交了一個方法,現在我提交了全班。一個人試圖幫助我,但我沒有成功,沒有正常工作。上次我更新了我的代碼,但它的播放器一次又一次地播放同一首歌曲請遵守我的代碼,並給我最好的建議。我不是專業的專家開發人員。我是應用程序開發的初學者。所以請給我確切的代碼。

+0

什麼是'songs'名單內?也請提供你的startPlaying()方法代碼 – Droidman

+0

歌曲是'private List songs = new ArrayList ();' –

+0

我加了startPlaying方法。 Plase,幫助我。如果您需要任何其他信息,請通知我@Droidman –

回答

0

你已經擁有的所有歌曲列表,所以我建議你提供你想要來演奏的URL到您的MediaPlayer的歌曲的位置:

public class AlbumPlayActivity extends AppCompatActivity implements View.OnClickListener { 
private List<SongListModel> songs = new ArrayList<SongListModel>(); 
private SongAdapter songAdapter; 
String URL_SONGS; 
String URL_ALBUM_ART; 
String URL_ALBUM_ART_BIG; 
String URL_ALBUM_ART_BLUR; 
String URL_MP3; 
ListView lvSongs; 
MediaPlayer mediaPlayer; 
NetworkImageView nivAlbumArt,nivAlbumArtBlur; 
private double startTime = 0; 
private double finalTime = 0; 
private Handler myHandler = new Handler(); 

public int currentlyPlaying; 

private int forwardTime = 5000; 
private int backwardTime = 5000; 
private SeekBar seekbar; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
public int oneTimeOnly = 0; 
int songID = 0; 
ImageButton ibPrev, ibPlay, ibPause, ibNext, ibFastForward, ibFastRewind; 
TextView tvStartTime, tvEndTime; 
RelativeLayout llList; 
ImageButton ibShare; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_album_play); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    URL_SONGS = getIntent().getExtras().getString("URL_SONG"); 
    URL_ALBUM_ART = getIntent().getExtras().getString("URL_ALBUM_ART"); 
    URL_ALBUM_ART_BIG = getIntent().getExtras().getString("URL_ALBUM_ART_BIG"); 
    URL_ALBUM_ART_BLUR = getIntent().getExtras().getString("URL_ALBUM_ART_BLUR"); 
    imageLoader = AppController.getInstance().getImageLoader(); 
    lvSongs = (ListView) findViewById(R.id.lvSongList); 
    nivAlbumArt = (NetworkImageView) findViewById(R.id.nivAlbumArt); 
    ibNext = (ImageButton) findViewById(R.id.ibNext); 
    ibPlay = (ImageButton) findViewById(R.id.ibPlay); 
    ibFastRewind = (ImageButton) findViewById(R.id.ibFastRewind); 
    ibFastForward = (ImageButton) findViewById(R.id.ibFastForward); 
    ibPrev = (ImageButton) findViewById(R.id.ibPrev); 
    seekbar = (SeekBar) findViewById(R.id.seekBar); 
    tvStartTime = (TextView) findViewById(R.id.tvStartTime); 
    tvEndTime = (TextView) findViewById(R.id.tvEndTime); 
    llList = (RelativeLayout)findViewById(R.id.llList); 
    ibShare = (ImageButton)findViewById(R.id.ibShare); 
    seekbar.setClickable(false); 
    ibNext.setOnClickListener(this); 
    ibPlay.setOnClickListener(this); 
    ibPrev.setOnClickListener(this); 
    ibFastRewind.setOnClickListener(this); 
    ibFastForward.setOnClickListener(this); 
    ibShare.setOnClickListener(this); 

    songAdapter = new SongAdapter(this, songs); 
    lvSongs.setAdapter(songAdapter); 


    loadSongs(); 

    lvSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID = position; 
      stopPlaying(); 
      URL_MP3 = "http://your_host/apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20"); 
      songs.get(songID).setVisible(true); 
      mediaPlayer = new MediaPlayer(); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mediaPlayer.setDataSource(URL_MP3); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        mp.start(); 
        ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 

        finalTime = mp.getDuration(); 
        startTime = mp.getCurrentPosition(); 
        if (oneTimeOnly == 0) { 
         seekbar.setMax((int) finalTime); 
         oneTimeOnly = 1; 
        } 
        tvEndTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
        ); 

        tvStartTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
        ); 

        seekbar.setProgress((int) startTime); 
        myHandler.postDelayed(UpdateSongTime, 100); 
       } 
      }); 
      mediaPlayer.prepareAsync(); 
     } 
    }); 

    seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if(mediaPlayer != null && fromUser){ 
       mediaPlayer.seekTo(progress); 
      } 
     } 
    }); 
} 

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 
     case R.id.ibPrev: 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID--; 
      if(songID<0){ 
       songID=0; 
      } 

      if (songID >= 0) { 
       startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20")); 
       songs.get(songID).setVisible(true); 
       songAdapter.notifyDataSetChanged(); 
      } 
      break; 

     case R.id.ibPlay: 
      if (mediaPlayer.isPlaying()) { 
       if (mediaPlayer != null) { 
        mediaPlayer.pause(); 
        Log.i("Status:", " Paused"); 
        ibPlay.setImageResource(R.drawable.ic_play_circle_outline_white_48dp); 
       } 
      } else { 
       if (mediaPlayer != null) { 
        mediaPlayer.start(); 
        Log.i("Status:", " Playing"); 
        ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 
        finalTime = mediaPlayer.getDuration(); 
        startTime = mediaPlayer.getCurrentPosition(); 
        if (oneTimeOnly == 0) { 
         seekbar.setMax((int) finalTime); 
         oneTimeOnly = 1; 
        } 
        tvEndTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
        ); 

        tvStartTime.setText(String.format("%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
          TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
        ); 

        seekbar.setProgress((int) startTime); 
        myHandler.postDelayed(UpdateSongTime, 100); 
       } 
      } 
      break; 

     case R.id.ibShare: 
      Intent sendIntent = new Intent(); 
      sendIntent.setAction(Intent.ACTION_SEND); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, "Welcome to music radio"); 
      sendIntent.setType("text/plain"); 
      startActivity(sendIntent); 
      break; 

     case R.id.ibNext: 
      songs.get(songID).setVisible(false); 
      songAdapter.notifyDataSetChanged(); 
      songID++; 
      if (songID==songs.size()){ 
       ibNext.setEnabled(false); 
      } 

      if (songID <= songs.size()) { 
       startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20")); 
       songs.get(songID).setVisible(true); 
       songAdapter.notifyDataSetChanged(); 
      } 

      break; 
     case R.id.ibFastForward: 
      int temp = (int) startTime; 

      if ((temp + forwardTime) <= finalTime) { 
       startTime = startTime + forwardTime; 
       mediaPlayer.seekTo((int) startTime); 

      } else { 
       Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     case R.id.ibFastRewind: 
      int temp1 = (int) startTime; 

      if ((temp1 - backwardTime) > 0) { 
       startTime = startTime - backwardTime; 
       mediaPlayer.seekTo((int) startTime); 

      } else { 
       Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
    } 
} 


public void loadSongs() { 

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL_SONGS, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      nivAlbumArt.setImageUrl(URL_ALBUM_ART_BIG, imageLoader); 
      Glide.with(AlbumPlayActivity.this).load(URL_ALBUM_ART_BLUR).asBitmap().into(new SimpleTarget<Bitmap>(700,300) { 
       @Override 
       public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
        Drawable drawable = new BitmapDrawable(resource); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
         llList.setBackground(drawable); 
        } 
       } 
      }); 
      for (int i = 0; i < response.length(); i++) { 
       try { 
        JSONObject jObj = response.getJSONObject(i); 
        SongListModel songModel = new SongListModel(); 

        Log.i(">>REQ", jObj.toString()); 
        songModel.setAlbum_id(jObj.getString("album_id")); 
        songModel.setCategory_id(jObj.getString("category_id")); 
        songModel.setId(jObj.getString("id")); 
        songModel.setSinger_id(jObj.getString("singer_id")); 
        songModel.setSong(jObj.getString("song")); 

        songs.add(songModel); 
        startPlaying(songID); 
        songs.get(songID).setVisible(true); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


      } 
      songAdapter.notifyDataSetChanged(); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 
    jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(
      (int) TimeUnit.SECONDS.toMillis(20), 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    AppController.getInstance().addToRequestQueue(jsonArrayRequest); 
} 

private void startPlaying(final int position) { 
    stopPlaying(); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mediaPlayer.setDataSource("http://..../apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
      currentlyPlaying = position; 
      finalTime = mp.getDuration(); 
      startTime = mp.getCurrentPosition(); 
      ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp); 
      if (oneTimeOnly == 0) { 
       seekbar.setMax((int) finalTime); 
       oneTimeOnly = 1; 
      } 
      tvEndTime.setText(String.format("%d:%d", 
        TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
        TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) 
      ); 

      tvStartTime.setText(String.format("%d:%d", 
        TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
        TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) 
      ); 

      seekbar.setProgress((int) startTime); 
      myHandler.postDelayed(UpdateSongTime, 100); 
     } 
    }); 

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) { 
     currentlyPlaying++; 
      if(currentlyPlaying >= songs.size()) 
       currentlyPlaying = 0; 
      startPlaying(currentlyPlaying);     
     } 
    }); 

    mediaPlayer.prepareAsync(); 
} 



private void stopPlaying() { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer.reset(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 

     myHandler.removeCallbacks(UpdateSongTime); 
    } 
} 

@Override 
public void onBackPressed() { 
    stopPlaying(); 
    finish(); 
} 
@Override 
public boolean onCreateOptionsMenu (Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     stopPlaying(); 
     finish(); 
     return true; 
    } 

    if (id == R.id.action_home) { 
     stopPlaying(); 
     Intent intent = new Intent(AlbumPlayActivity.this,HomeActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private Runnable UpdateSongTime = new Runnable() { 
    public void run() { 
     startTime = mediaPlayer.getCurrentPosition(); 
     seekbar.setProgress((int) startTime); 
     tvStartTime.setText(String.format("%d:%d", 

       TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
       TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
           toMinutes((long) startTime))) 
     ); 

     myHandler.postDelayed(this, 100); 
    } 
}; 
+0

目前正在展開什麼?我試過你的代碼,但'currentlyPlaying = position'是錯誤。 @Droidman –

+0

當前播放ist只是一個'int',你在同一個類中聲明瞭你有播放方法 - 它表示當前播放列表中的歌曲的位置(或索引) – Droidman

+0

抱歉,作爲初學者,不要理解你對當前播放的說法。我還添加了loadSongs方法。請告訴我,我寫的是當前播放的地方.. @ Droidman –

相關問題