我的小部件附加了一个服务来处理各种点击“命令”,这些命令通过其意图传递。我还为重新启动服务的情况设置return START_REDELIVER_INTENT;
,以便在调用intent.getAction()时不给出nullPointerException;等等。问题是,当我通过setOnClickPendingIntent调用之一发送最后一个intent时,那么当重新启动服务时,它就好像用户点击了一个viewId一样。 e.g。
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));
makeControlPendingIntent是:
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));
}
我可以做些什么来检查服务是否正在重新启动,以便在Android重新启动我的服务的情况下不运行任何这些命令?
答案 0 :(得分:17)
我可以做些什么来检查服务是否正在重新启动,以便在Android重新启动我的服务的情况下不运行任何这些命令?
如果正在重新发送onStartCommand()
,START_FLAG_REDELIVERY
的flags参数将包含Intent
。所以,你可以这样做:
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
}