android小部件-重启后并不总是注册待处理的意图

Posted

技术标签:

【中文标题】android小部件-重启后并不总是注册待处理的意图【英文标题】:android widget - pending intents are not always registered after restart 【发布时间】:2012-04-24 19:21:33 【问题描述】:

我正在编写一个包含 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】:

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

【讨论】:

我已经测试了2天,确实有效:) 非常感谢! 很高兴听到这个消息!这也让我很沮丧。关于小部件的整个流程,文档可能会更加清晰,但我离题了。

以上是关于android小部件-重启后并不总是注册待处理的意图的主要内容,如果未能解决你的问题,请参考以下文章

小部件 ImageButton 侦听器并不总是被调用

Android - 带有标志的待处理意图

Android 小部件 - 在哪里注册显式广播

DOJO:onClick 并不总是在自定义小部件中调用

UICollectionView 的单元格在滚动后并不总是刷新

如何在 android 中探索样式