public boolean onError(MediaPlayer mp_UBRUGT, int hvad, int extra) {
//Log.d("onError(" + MedieafspillerInfo.fejlkodeTilStreng(hvad) + "(" + hvad + ") " + extra+ " onErrorTæller="+onErrorTæller);
Log.d("onError(" + hvad + ") " + extra + " onErrorTæller=" + onErrorTæller);
if (vækningIGang) {
ringDenAlarm();
return true;
}
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN && hvad == MediaPlayer.MEDIA_ERROR_UNKNOWN
&& "GT-I9300".equals(Build.MODEL) && mediaPlayer.isPlaying()) {
// Ignorer, da Samsung Galaxy SIII på Android 4.1 Jelly Bean
// sender denne fejl (onError(1) -110) men i øvrigt spiller fint videre!
return true;
}
// Iflg http://developer.android.com/guide/topics/media/index.html :
// "It's important to remember that when an error occurs, the MediaPlayer moves to the Error
// state and you must reset it before you can use it again."
if (afspillerstatus == Status.SPILLER || afspillerstatus == Status.FORBINDER) {
// Hvis der har været
// 1) færre end 10 fejl eller
// 2) der højest er 1 fejl pr 20 sekunder så prøv igen
long dt = System.currentTimeMillis() - onErrorTællerNultid;
if (onErrorTæller++ < (App.fejlsøgning ? 2 : 10) || (dt / onErrorTæller > 20000)) {
pauseAfspilningIntern();
//mediaPlayer.stop();
//mediaPlayer.reset();
if (App.erOnline()) {
// Vi venter længere og længere tid her
int n = onErrorTæller;
if (n > 11) n = 11;
int ventetid = 10 + 5 * (1 << n); // fra n=0:10 msek til n=10:5 sek til max n=11:10 sek
Log.d("Ventetid før vi prøver igen: " + ventetid + " n=" + n + " " + onErrorTæller);
handler.postDelayed(startAfspilningIntern, ventetid);
} else {
Log.d("Vent på at vi kommer online igen");
onErrorTællerNultid = System.currentTimeMillis();
App.netværk.observatører.add(venterPåAtKommeOnline);
if (afspillerlyde) afspillerlyd.fejl.start();
}
} else {
pauseAfspilning(); // Vi giver op efter 10. forsøg
App.langToast(R.string.Beklager_kan_ikke_spille_radio);
App.langToast(R.string.Tjek_din_internetforbindelse_og___);
if (afspillerlyde) afspillerlyd.fejl.start();
}
} else {
mediaPlayer.reset();
}
return true;
}