Я работал гладко при запуске с файлом mp3, помещенным в raw-папку, но у меня возникла ошибка при запуске с URL-адресом ссылки из firebase в реальном времени. Мой код ниже:
Я получил ошибку при запуске со ссылкой из firebase. Мой код ниже. Сначала я могу запустить с mp3-файлом, который обычно копируется в сырую папку. Проблема появляется только при запуске с URL, он должен оставаться в блоке try catch и требовать финального медиаплеера.
package com.example.trainmedia;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Resources;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.Toast;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private Button btnPlay,btnBack,btnFor;
private SeekBar seekBar;
private Runnable runnable;
private Handler handler;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnBack = findViewById(R.id.btnBack);
btnPlay = findViewById(R.id.btnPlay);
btnFor = findViewById(R.id.btnFor);
seekBar = findViewById(R.id.seekbar);
handler = new Handler();
//mediaPlayer = MediaPlayer.create(this,R.raw.song);
String url = "https://firebasestorage.googleapis.com/v0/b/toeicdata.appspot.com/o/part1%2F1585977072425.mp3?alt=media&token=ca0414fa-cd7e-4f1d-9992-9095cfc69406";
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.start();
changeSeekbar();
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser){
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
btnPlay.setText(">");
}else {
mediaPlayer.start();
btnPlay.setText("Play");
changeSeekbar();
}
}
});
btnFor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition()+5000);
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition()-5000);
}
});
}
public void changeSeekbar(){
seekBar.setProgress(mediaPlayer.getCurrentPosition());
if (mediaPlayer.isPlaying()){
runnable = new Runnable() {
@Override
public void run() {
changeSeekbar();
}
};
handler.postDelayed(runnable,1000);
}
}
}
Кто-нибудь поможет мне с ошибкой ???