Implemented Errorhandler in PlaybackService
This commit is contained in:
parent
3c2f083378
commit
92c32662ca
@ -69,5 +69,7 @@
|
|||||||
<string name="download_error_connection_error">Connection error</string>
|
<string name="download_error_connection_error">Connection error</string>
|
||||||
<string name="txtvfeedurl_label">Type in the URL of the Feed here:</string>
|
<string name="txtvfeedurl_label">Type in the URL of the Feed here:</string>
|
||||||
<string name="cover_label">Cover</string>
|
<string name="cover_label">Cover</string>
|
||||||
|
<string name="playback_error_server_died">Server died</string>
|
||||||
|
<string name="playback_error_unknown">Unknown Error</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -1,8 +1,10 @@
|
|||||||
package de.podfetcher.activity;
|
package de.podfetcher.activity;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
@ -50,6 +52,8 @@ import de.podfetcher.fragment.ItemDescriptionFragment;
|
|||||||
import de.podfetcher.service.PlaybackService;
|
import de.podfetcher.service.PlaybackService;
|
||||||
import de.podfetcher.service.PlayerStatus;
|
import de.podfetcher.service.PlayerStatus;
|
||||||
import de.podfetcher.util.Converter;
|
import de.podfetcher.util.Converter;
|
||||||
|
import de.podfetcher.util.DownloadError;
|
||||||
|
import de.podfetcher.util.MediaPlayerError;
|
||||||
|
|
||||||
public class MediaplayerActivity extends SherlockFragmentActivity implements
|
public class MediaplayerActivity extends SherlockFragmentActivity implements
|
||||||
SurfaceHolder.Callback {
|
SurfaceHolder.Callback {
|
||||||
@ -100,6 +104,13 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
unregisterReceiver(notificationReceiver);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
unbindService(mConnection);
|
unbindService(mConnection);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
@ -207,7 +218,6 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
|
|
||||||
case ERROR:
|
case ERROR:
|
||||||
setStatusMsg(R.string.player_error_msg, View.VISIBLE);
|
setStatusMsg(R.string.player_error_msg, View.VISIBLE);
|
||||||
handleError();
|
|
||||||
break;
|
break;
|
||||||
case PAUSED:
|
case PAUSED:
|
||||||
setStatusMsg(R.string.player_paused_msg, View.VISIBLE);
|
setStatusMsg(R.string.player_paused_msg, View.VISIBLE);
|
||||||
@ -264,7 +274,9 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
txtvPosition.setText(Converter
|
txtvPosition.setText(Converter
|
||||||
.getDurationStringLong(playbackService.getPlayer()
|
.getDurationStringLong(playbackService.getPlayer()
|
||||||
.getCurrentPosition()));
|
.getCurrentPosition()));
|
||||||
|
txtvLength.setText(Converter
|
||||||
|
.getDurationStringLong(playbackService.getPlayer()
|
||||||
|
.getDuration()));
|
||||||
updateProgressbarPosition();
|
updateProgressbarPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,8 +459,19 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
videoControlsShowing = !videoControlsShowing;
|
videoControlsShowing = !videoControlsShowing;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleError() {
|
private void handleError(int errorCode) {
|
||||||
// TODO implement
|
final AlertDialog errorDialog = new AlertDialog.Builder(this).create();
|
||||||
|
errorDialog.setTitle(R.string.error_label);
|
||||||
|
errorDialog
|
||||||
|
.setMessage(MediaPlayerError.getErrorString(this, errorCode));
|
||||||
|
errorDialog.setButton("OK", new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
errorDialog.dismiss();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
errorDialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServiceConnection mConnection = new ServiceConnection() {
|
private ServiceConnection mConnection = new ServiceConnection() {
|
||||||
@ -458,8 +481,13 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
int requestedOrientation;
|
int requestedOrientation;
|
||||||
status = playbackService.getStatus();
|
status = playbackService.getStatus();
|
||||||
media = playbackService.getMedia();
|
media = playbackService.getMedia();
|
||||||
|
|
||||||
registerReceiver(statusUpdate, new IntentFilter(
|
registerReceiver(statusUpdate, new IntentFilter(
|
||||||
PlaybackService.ACTION_PLAYER_STATUS_CHANGED));
|
PlaybackService.ACTION_PLAYER_STATUS_CHANGED));
|
||||||
|
|
||||||
|
registerReceiver(notificationReceiver, new IntentFilter(
|
||||||
|
PlaybackService.ACTION_PLAYER_NOTIFICATION));
|
||||||
|
|
||||||
if (playbackService.isPlayingVideo()) {
|
if (playbackService.isPlayingVideo()) {
|
||||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
|
||||||
@ -497,6 +525,27 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private BroadcastReceiver notificationReceiver = new BroadcastReceiver() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Log.d(TAG, "Received notification intent");
|
||||||
|
int type = intent.getIntExtra(
|
||||||
|
PlaybackService.EXTRA_NOTIFICATION_TYPE, -1);
|
||||||
|
int code = intent.getIntExtra(
|
||||||
|
PlaybackService.EXTRA_NOTIFICATION_CODE, -1);
|
||||||
|
if (code != -1 && type != -1) {
|
||||||
|
if (type == PlaybackService.NOTIFICATION_TYPE_ERROR) {
|
||||||
|
handleError(code);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Bad arguments. Won't handle intent");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/** Refreshes the current position of the media file that is playing. */
|
/** Refreshes the current position of the media file that is playing. */
|
||||||
public class MediaPositionObserver extends
|
public class MediaPositionObserver extends
|
||||||
AsyncTask<MediaPlayer, Void, Void> {
|
AsyncTask<MediaPlayer, Void, Void> {
|
||||||
|
@ -57,6 +57,15 @@ public class PlaybackService extends Service {
|
|||||||
|
|
||||||
public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.podfetcher.service.playerStatusChanged";
|
public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.podfetcher.service.playerStatusChanged";
|
||||||
|
|
||||||
|
public static final String ACTION_PLAYER_NOTIFICATION = "action.de.podfetcher.service.playerNotification";
|
||||||
|
public static final String EXTRA_NOTIFICATION_CODE = "extra.de.podfetcher.service.notificationCode";
|
||||||
|
public static final String EXTRA_NOTIFICATION_TYPE = "extra.de.podfetcher.service.notificationType";
|
||||||
|
|
||||||
|
public static final int NOTIFICATION_TYPE_ERROR = 0;
|
||||||
|
public static final int NOTIFICATION_TYPE_INFO = 1;
|
||||||
|
public static final int NOTIFICATION_TYPE_BUFFER_UPDATE = 2;
|
||||||
|
|
||||||
|
|
||||||
/** Is true if service is running. */
|
/** Is true if service is running. */
|
||||||
public static boolean isRunning = false;
|
public static boolean isRunning = false;
|
||||||
|
|
||||||
@ -100,6 +109,7 @@ public class PlaybackService extends Service {
|
|||||||
player.setOnPreparedListener(preparedListener);
|
player.setOnPreparedListener(preparedListener);
|
||||||
player.setOnCompletionListener(completionListener);
|
player.setOnCompletionListener(completionListener);
|
||||||
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
||||||
|
player.setOnErrorListener(onErrorListener);
|
||||||
mediaButtonReceiver = new ComponentName(getPackageName(),
|
mediaButtonReceiver = new ComponentName(getPackageName(),
|
||||||
MediaButtonReceiver.class.getName());
|
MediaButtonReceiver.class.getName());
|
||||||
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
|
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
|
||||||
@ -266,6 +276,7 @@ public class PlaybackService extends Service {
|
|||||||
player.setOnPreparedListener(preparedListener);
|
player.setOnPreparedListener(preparedListener);
|
||||||
player.setOnCompletionListener(completionListener);
|
player.setOnCompletionListener(completionListener);
|
||||||
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
||||||
|
player.setOnErrorListener(onErrorListener);
|
||||||
status = PlayerStatus.STOPPED;
|
status = PlayerStatus.STOPPED;
|
||||||
setupMediaplayer();
|
setupMediaplayer();
|
||||||
}
|
}
|
||||||
@ -343,6 +354,20 @@ public class PlaybackService extends Service {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener() {
|
||||||
|
private static final String TAG = "PlaybackService.onErrorListener";
|
||||||
|
@Override
|
||||||
|
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||||
|
Log.w(TAG, "An error has occured: " + what);
|
||||||
|
if (mp.isPlaying()) {
|
||||||
|
pause();
|
||||||
|
}
|
||||||
|
sendNotificationBroadcast(NOTIFICATION_TYPE_ERROR, what);
|
||||||
|
stopSelf();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private MediaPlayer.OnCompletionListener completionListener = new MediaPlayer.OnCompletionListener() {
|
private MediaPlayer.OnCompletionListener completionListener = new MediaPlayer.OnCompletionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -414,6 +439,13 @@ public class PlaybackService extends Service {
|
|||||||
sendBroadcast(new Intent(ACTION_PLAYER_STATUS_CHANGED));
|
sendBroadcast(new Intent(ACTION_PLAYER_STATUS_CHANGED));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendNotificationBroadcast(int type, int code) {
|
||||||
|
Intent intent = new Intent(ACTION_PLAYER_NOTIFICATION);
|
||||||
|
intent.putExtra(EXTRA_NOTIFICATION_TYPE, type);
|
||||||
|
intent.putExtra(EXTRA_NOTIFICATION_CODE, code);
|
||||||
|
sendBroadcast(intent);
|
||||||
|
}
|
||||||
|
|
||||||
/** Prepares notification and starts the service in the foreground. */
|
/** Prepares notification and starts the service in the foreground. */
|
||||||
private void setupNotification() {
|
private void setupNotification() {
|
||||||
PendingIntent pIntent = PendingIntent.getActivity(this, 0, new Intent(
|
PendingIntent pIntent = PendingIntent.getActivity(this, 0, new Intent(
|
||||||
|
23
src/de/podfetcher/util/MediaPlayerError.java
Normal file
23
src/de/podfetcher/util/MediaPlayerError.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package de.podfetcher.util;
|
||||||
|
|
||||||
|
import de.podfetcher.R;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.media.MediaPlayer;
|
||||||
|
|
||||||
|
/** Utility class for MediaPlayer errors. */
|
||||||
|
public class MediaPlayerError {
|
||||||
|
|
||||||
|
/** Get a human-readable string for a specific error code. */
|
||||||
|
public static String getErrorString(Context context, int code) {
|
||||||
|
int resId;
|
||||||
|
switch(code) {
|
||||||
|
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
|
||||||
|
resId = R.string.playback_error_server_died;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
resId = R.string.playback_error_unknown;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return context.getString(resId);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user