am getting a black screen when loading a new activity which contains mediaplayer with an mp3 from a URL. if internet is fast e.g 4G , everything is okay and it takes a few seconds to load. but if internet is slow. e.g 2g and 3g , it takes very long and brings a black screen . i need the activity to load without internet, without the black screen. please help me with what i can change on this code
Button download;
private ImageView imagePlayPause;
private TextView textCurrentTime, textTotalDuration;
private SeekBar playerSeekBar;
private MediaPlayer mediaPlayer;
private final Handler handler = new Handler();
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ct);
download = findViewById(R.id.download);
download.setOnClickListener(view -> gotoUrl("https://www.facebook.com/davidsibandeRN"));
ImageView imageView3=findViewById(R.id.ImageView3);
String url ="https://dl.dropboxusercontent.com/s/ruo77t7o3dyggpd/parotitis.png?dl=1";
Picasso.get().load(url).placeholder(R.drawable.ic_launcher_background).into(imageView3);
imagePlayPause = findViewById(R.id.imagePlayPause);
textCurrentTime = findViewById(R.id.textCurrentTime);
textTotalDuration = findViewById(R.id.textTotalDuration);
playerSeekBar = findViewById(R.id.playerSeekBar);
mediaPlayer = new MediaPlayer();
playerSeekBar.setMax(100);
imagePlayPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
handler.removeCallbacks(updater);
mediaPlayer.pause();
imagePlayPause.setImageResource(R.drawable.ic_baseline_play_arrow_24);
} else {
mediaPlayer.start();
imagePlayPause.setImageResource(R.drawable.ic_baseline_pause_24);
updateSeekBar();
}
}
});
prepareMediaPlayer();
playerSeekBar.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
SeekBar seekBar = (SeekBar) view;
int playPosition = (mediaPlayer.getDuration() / 100) * seekBar.getProgress();
mediaPlayer.seekTo(playPosition);
textCurrentTime.setText(milliSecondsToTimer(mediaPlayer.getCurrentPosition()));
return false;
}
});
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) {
playerSeekBar.setSecondaryProgress(i);
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
playerSeekBar.setProgress(0);
imagePlayPause.setImageResource(R.drawable.ic_baseline_play_arrow_24);
textCurrentTime.setText(R.string.zero);
textTotalDuration.setText(R.string.zero);
mediaPlayer.reset();
prepareMediaPlayer();
}
});
}
private void gotoUrl(String s) {
Uri uri = Uri.parse(s);
startActivity(new Intent(Intent.ACTION_VIEW,uri));
}
private void prepareMediaPlayer() {
try {
mediaPlayer.setDataSource("https://dl.dropboxusercontent.com/s/tnl4o8isv74rcjb/5.%20parotitis.mp3?dl=1");
mediaPlayer.prepare();
textTotalDuration.setText(milliSecondsToTimer(mediaPlayer.getDuration()));
} catch (Exception exception) {
Toast.makeText(this, exception.getMessage(), Toast.LENGTH_SHORT).show();
}
}
private final Runnable updater = new Runnable() {
@Override
public void run() {
updateSeekBar();
long currentDuration = mediaPlayer.getCurrentPosition();
textCurrentTime.setText(milliSecondsToTimer(currentDuration));
}
};
private void updateSeekBar() {
if (mediaPlayer.isPlaying()) {
playerSeekBar.setProgress((int) (((float) mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration()) * 100));
handler.postDelayed(updater, 1000);
}
}
private String milliSecondsToTimer(long milliSeconds) {
String timerString = "";
String secondString;
int hours = (int) (milliSeconds / (1000 * 60 * 60));
int minutes = (int) (milliSeconds % (1000 * 60 * 60)) / (1000 * 60);
int seconds = (int) ((milliSeconds % (1000 * 60 * 60)) % (1000 * 60) / 1000);
if (hours > 0) {
timerString = hours + ":";
}
if (seconds < 10) {
secondString = "0" + seconds;
} else {
secondString = "" + seconds;
}
timerString = timerString + minutes + ":" + secondString;
return timerString;
}
@Override
public void onBackPressed() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
super.onBackPressed();
}
}