Android: detectar el servicio reiniciado con el indicador START_REDELIVER_INTENT
Mi widget tiene un servicio adjunto para procesar varios "comandos" de clic que se pasan a través de su intención. También he establecido return START_REDELIVER_INTENT;
Para el caso de cuando se reanude el servicio para no dar una excepción nullPointer al llamar a intention.getAction (); y similares. El problema es que cuando el último intento fue enviado por una de las llamadas setOnClickPendingIntent que tengo, entonces cuando el servicio se reinicia, actúa como si el usuario hubiera hecho clic en uno de los viewId. p.ej
String command = intent.getAction(); int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); if(command.equals("some command")){ //do something } ... remoteView.setOnClickPendingIntent(R.id.viewId,MyClass.makeControlPendingIntent(getApplicationContext(),"some command",appWidgetId));
Donde makeControlPendingIntent es:
public static PendingIntent makeControlPendingIntent(Context context, String command, int appWidgetId) { Intent active = new Intent(context,MyService.class); active.setAction(command); active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); Uri data = Uri.withAppendedPath(Uri.parse("myclass://widget/id/#"+command+appWidgetId), String.valueOf(appWidgetId)); active.setData(data); return(PendingIntent.getService(context, 0, active, PendingIntent.FLAG_UPDATE_CURRENT)); }
¿Hay algo que pueda hacer para comprobar si el servicio se está reiniciando para no ejecutar ninguno de esos comandos en el caso en que Android reinicie mi servicio?
¿Hay algo que pueda hacer para comprobar si el servicio se está reiniciando para no ejecutar ninguno de esos comandos en el caso en que Android reinicie mi servicio?
El parámetro flags para onStartCommand()
contendrá START_FLAG_REDELIVERY
si la Intent
está siendo re-entregada. Por lo tanto, puede hacer algo como esto:
public int onStartCommand(Intent intent, int flags, int startId) { if ((flags & START_FLAG_REDELIVERY)!=0) { // if crash restart... // do something here } // rest of logic here }
Usted debe ser capaz de comprobar si la intención es nulo para saber si su reiniciado