【发布时间】:2020-02-17 17:18:14
【问题描述】:
我正在尝试制作一个音乐应用程序,它可以从 firebase 加载 Song Url、Song name 和 Artist name。我有两个活动,一个是 ExtrasActivity。ExtrasActivity 包含一个 recyclerview,它将歌曲加载到列表中,当我们单击项目时,它会将 songUrl、SongName 和 ArtistName 发送到另一个名为 StackActivity 的活动。我在 StackActivity 中遇到问题,例如播放歌曲时,如果我返回单击并播放另一首歌曲,那么有时它可以正常工作,但有时它会一起播放两首歌曲。 我尝试了很多方法来解决这个问题,但它们都不能正常工作我认为我的 StackActivity 有问题。
这是我的 StackActivity:-
public class StackActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener {
private MediaPlayer mediaPlayer;
private Boolean isPlaying = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stack_activity_name);
SeekBar Song_playing_seekbar;
TextView songInfoSong = findViewById(R.id.song_info_song);
TextView songInfoArtist = findViewById(R.id.song_info_artist);
songInfoSong.setText(getIntent().getStringExtra("Name"));
songInfoArtist.setText(getIntent().getStringExtra("Artist"));
mediaPlayer = new MediaPlayer();
playSong();
}
private void playSong() {
final FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReferenceFromUrl(getIntent().getStringExtra("SongUrl"));
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
try {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
final String url = uri.toString();
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(StackActivity.this);
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i("TAg", "aFailed");
}
});
}
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
CheckIfSongIsPlayingOrNot();
if (isPlaying == false) {
mediaPlayer.start();
} else if (isPlaying == true) {
mediaPlayer.stop();
}
}
private void CheckIfSongIsPlayingOrNot() {
if (mediaPlayer.isPlaying()) {
isPlaying = true;
} else if (!mediaPlayer.isPlaying()) {
isPlaying = false;
}
}
因此,如果您发现任何问题,请帮助我进行改进。
【问题讨论】: