我已经实现了一个App Widget来点击时启动我的活动。
onUpdate()
的 WidgetProvider
方法:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidgetprovider_layout);
// ....update updateViews here
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
Intent onClickedIntent = new Intent(context,MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, onClickedIntent, 0);
updateViews.setOnClickPendingIntent(R.id.myView, pi);
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
}
在主屏幕上添加小部件后,它按预期工作。
但有时候,它无法再次启动活动!我必须删除小部件并再次添加。
我该如何解决?请帮忙。
答案 0 :(得分:0)
我会这样做:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidgetprovider_layout);
Intent onClickedIntent = new Intent(context,MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, onClickedIntent, 0);
updateViews.setOnClickPendingIntent(R.id.myView, pi);
for (int i=0; i<appWidgetIds.length; i++) {
appWidgetManager.updateAppWidget(appWidgetIds[i], updateViews);
}
}
我不确定的一件事就是致电super.onUpdate()
。我自己的小部件代码没有它,似乎工作正常......不确定是否需要它。
我不知道这个重构会不会解决你的问题!
答案 1 :(得分:0)
我知道这已经晚了两年但我也一直在努力,直到今天我才知道自己做错了什么。我认为主要关键是要关注RemoteViews类的使用。您将这些对象准备为一种指令集,供另一个要遵循的流程使用。设置“on click pending intent”必须在将发送到updateAppWidget方法之前完成,因此您对该方法的第一次调用不会使您的“myView”对象获得点击。您的代码接下来设置onClick触发器并再次调用updateAppWidget。它看起来应该可以工作但是有一个令人困惑的主题,关于两个意图何时是截然不同或含糊不清的,你可能想要阅读这些意图以理解为什么你的代码工作不可预测。如果我是对的,那么外卖就是不要第一次调用updateAppWidget,然后在创建RemoteViews对象时始终确保设置onClick触发器。无论如何,我希望如此。