use*_*016 5 android android-intent
我有一个带有配置活动的app小部件,我想在单击活动中的OK按钮时触发小部件的更新.我写了这段代码:
Intent initialUpdateIntent=new Intent(AppWidgetManager.
ACTION_APPWIDGET_UPDATE);
initialUpdateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
widgetID);
sendBroadcast(initialUpdateIntent);
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,没有调用onUpdate函数!有谁知道问题可能是什么?谢谢.
for*_*ill 14
请尝试以下方法:
public static void updateWidgets(Context context) {
Intent intent = new Intent(context.getApplicationContext(), DayActivitiesAppWidget.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
int[] ids = widgetManager.getAppWidgetIds(new ComponentName(context, DayActivitiesAppWidget.class));
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
widgetManager.notifyAppWidgetViewDataChanged(ids, android.R.id.list);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
context.sendBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)
以AppWidgetProvider
这种方式将DayActivitiesAppWidget替换为您的类更新所有窗口小部件实例,然后您可以通过更新单个窗口小部件实例来跟踪问题.
您是否尝试在 onReceive 中捕获您的广播消息:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
String strAction = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(strAction)) {
/* Do update */
}
}
Run Code Online (Sandbox Code Playgroud)
否则,IMO 最好定义自己的消息,而不是使用 ACTION_APPWIDGET_UPDATE 来明确小部件更新视图的逻辑,类似的内容,在 1.在清单文件中声明意图名称:
<action android:name="com.yourdomain.youapp.SETTING_UPDATE" />
Run Code Online (Sandbox Code Playgroud)
2.定义意图名称:
public static final String SETTING_UPDATE = "com.yourdomain.youapp.SETTING_UPDATE";
Run Code Online (Sandbox Code Playgroud)
3.onReceive中处理:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
String strAction = intent.getAction();
if (SETTING_UPDATE.equals(strAction)) {
/* Do update setting */
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助^^