android小部件 - 重启后并不总是注册挂起的意图

时间:2012-04-12 12:35:41

标签: android android-widget broadcastreceiver

我正在写一个包含2个按钮的小部件。问题是 - 偶尔,当小部件被移除/添加到屏幕时,按钮不起作用,似乎他们没有附加任何监听器。我在BroadcastReceiver中使用下面的代码:

@Override
public void onUpdate(final Context context, final AppWidgetManager aAppWidgetManager,
                     final int[] appWidgetIds) {
    super.onUpdate(context, aAppWidgetManager, appWidgetIds);
    Log.d("Widget_On_update", "Total widgets : " + appWidgetIds.length);
    for (final int widgetId : appWidgetIds) {
        Log.d("Widget_On_update", "Updating widget : " + widgetId);
        final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        updateActionListener(true, context, appWidgetIds, remoteViews, UPDATE_DATA_ACTION, id.button_data_update);
        updateActionListener(true, context, appWidgetIds, remoteViews, UPDATE_WIFI_ACTION, id.button_wifi_update);
        aAppWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
    updateStatus(context);
}


private void updateActionListener(final boolean add, final Context context, final int[] appWidgetIds,
                                  final RemoteViews aRemoteViews, final String aAction, final int aViewId) {
    // Register an onClickListener
    final Intent intent = new Intent(context, DataToggleWidgetProvider.class);
    intent.setAction(aAction);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    if (add) {
        aRemoteViews.setOnClickPendingIntent(aViewId, pendingIntent);
    } else {
        pendingIntent.cancel();
    }
}

我为PendingIntent.getBroadcast的第二个参数尝试了不同的值,例如Math.random,静态计数器等等。这两种方式都不奏效。任何人都可以帮助我吗?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

重启后,您是否检查过小部件正在执行onUpdate()?您可能需要考虑通过onEnabled()调用更新。请参阅this answer相关问题。