簡體   English   中英

如何在Service播放新歌曲時停止舊歌曲

[英]how to stop old song when new song is playing with Service

我正在嘗試創建一個音樂應用。 我正在使用此代碼停止播放另一首歌曲時的歌曲,但此代碼不起作用。 兩首歌曲一起播放,我想一首播放,或者如果有其他歌曲單擊停止前一首歌曲並播放那首歌曲。 任何人都可以幫助我。

主要活動:

private void clickSong() {
        mListBaiHat.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {    
                String local = mPath.get(i);
                mserviceMusic.setLocalSongRunging(i);   

                try {
                    mserviceMusic.setLocalSong(local);
                    mClickStart.setBackgroundResource(R.drawable.ic_media_pause_light);    

                } catch (IOException e) {
                    e.printStackTrace();
                }    

                mHinhAlbum.setImageResource(arrayList.get(i).getHinhAlbum());
                mCLickTenBaiHat.setText(arrayList.get(i).getTenBaiHat());
                mCLickCasy.setText(arrayList.get(i).getTheloai());    

                    MediaMetadataRetriever retriever = null;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
                    retriever = new MediaMetadataRetriever();
                    retriever.setDataSource(mPath.get(i));

                    String tenAlbum = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
                    String ten = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

                    mCLickTenBaiHat.setText(ten);
                    mCLickCasy.setText(tenAlbum);

                }

                bundle = new Bundle();
                bundle.putInt("vitri", i);
                bundle.putStringArrayList("tenbai", mPath);


            }
        });
    }

服務:

public void setLocalSongRunging(int vitri){
    mLocaltionSong = vitri;
}

public void setLocalSong(String localsong) throws IOException {
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(localsong);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    if (mediaPlayer.isPlaying()) {
        mediaPlayer.stop();            
        mediaPlayer.release();
        mediaPlayer=null;

    }else {
        mediaPlayer.prepare();
        mediaPlayer.start();
    }

}

您每次都在創建一個新的MediaPlayer 因此,停止和釋放的代碼將無法正常工作(因為正在使用不同的setLocalSong(String localsong)因此需要在setLocalSong(String localsong)更改代碼。

   public void setLocalSong(String localsong) throws IOException {
    if(mediaPlayer != null){
        mediaPlayer.stop();            
        mediaPlayer.release();
        mediaPlayer=null;
    }
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(localsong);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.prepare();
    mediaPlayer.start();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM