好吧,我有一个桌面小部件,里面有几个按钮。每个按钮都应该启动一个Activity。一切都很顺利,但当我重新启动手机时,小部件按钮不再起作用了。当然,当我删除小部件并再次添加它时,一切都会再次运行。有什么问题?我这样实现了它:
清单
<receiver android:name=".MyWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
...
</intent-filter>
...
</receiver>
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
方法正确运行。那么它是如何可能的,重启后我的小部件中的按钮没有响应点击?就像没有注册(或交付)意图一样。
BOOT_COMPLETED
的注册接收器,但据我所知,只有当你需要做一些特别的工作时才需要(例如重启后重新注册警报 - 这不是我的情况)。
答案 0 :(得分:1)
绝对无法理解,但是当我从onUpdate
方法(在接收器中)添加代码时:
Intent newIntent = new Intent(context, UpdateService.class);
newIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
context.startService(newIntent);
到onEnabled
它有效...但它真的很难理解,因为我的更新方法(在UpdateService中)总是被正确触发,我看到弹出窗口......
现在它被解雇两次(从onEnabled开始,之后立即从onUpdate开始)并且它有效...谁可以解释这个?我可能错过了很多非常重要的文档。
编辑:更正,它有时只能工作....奇怪