好吧,我有一个桌面小部件,里面有几个按钮。每个按钮都应该启动一个活动。一切都很顺利,但是当我重新启动手机时,小部件按钮不再起作用。当然,当我删除小部件并再次添加它时,一切都会恢复正常。有什么问题?我是这样实现的:
显现
<receiver android:name=".MyWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
...
</intent-filter>
...
</receiver>
接收者
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
// in service, due to possible ANR erors
Intent newIntent = new Intent(context, UpdateService.class);
newIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
context.startService(newIntent);
return;
}
UPDATESERVICE(其意图服务不是标准服务)
private boolean update() {
...
popup.showShort("whoaaa - onUpdate");
i = new Intent(this, SettingsActivity.class);
pi = PendingIntent.getActivity(context, 2, i, PendingIntent.FLAG_CANCEL_CURRENT);
updateViews.setOnClickPendingIntent(R.id.btnSettings, pi);
i = new Intent(this, AboutActivity.class);
pi = PendingIntent.getActivity(context, 3, i, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.btnAbout, pi);
...
}
最好的是,即使在手机重新启动后,我也可以在每次更新时看到弹出窗口。所以它 100% 确定在重新启动后我receiver
运行它的onUpdate
方法,它会触发我的UpdateService
(它的意图服务)并且它的update
方法运行正确。那么,重新启动后,我的小部件中的任何按钮都不会对点击做出反应,这怎么可能呢?就像没有注册(或交付)意图一样。
PS:也许你会说,我需要注册接收器BOOT_COMPLETED
,但我知道只有当你需要做一些特殊工作时才有必要(例如重新启动后重新注册警报 - 这不是我的情况)。