Android 2.3.3中的小部件中的奇怪错误

时间:2013-07-24 07:08:03

标签: android android-widget

我正在尝试编写主屏幕小部件。在小部件上,TextViews只有两个ImageButtons。一个用于刷新,第二个用于打开设置窗口。

问题是它正在使用Android 4.2.2而不能在Android 2.3.3上运行。

一切都很好看。但是当按下按钮时他们就不能工作了。最有趣的是它只发生在小部件的第一个实例上。当第二个添加时,一切正常。

这是我的代码的一小部分,用于进行更新,此时它肯定不适用于Android 2.3.3:

@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds)
    {
        Log.i(TAG, "onUpdate");
        // Get all widgets ids
        ComponentName thisWidget = new ComponentName(context,
                DataAppWidgetProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

        Log.d(TAG, "widgets id: " + allWidgetIds.length);

        for (int widgetId : allWidgetIds)
        {
            Log.d(TAG, "Widget: " + widgetId);
            // Get remote view
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                    R.layout.widget_layout);

            refreshIntentSend(context, remoteViews, allWidgetIds, widgetId);
            appWidgetManager.updateAppWidget(widgetId, remoteViews);
        }

        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

    /**
     * Set up and add intent to button to refresh given widget
     */
    private void refreshIntentSend(Context context, RemoteViews remoteViews,
            int[] allWidgetIds, int widgetId)
    {
        Intent i = new Intent(context, DataAppWidgetProvider.class);
        i.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        PendingIntent pi = PendingIntent.getBroadcast(context,0, i,PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.imb_refresh,pi);
        Log.d(TAG, "refresh: " + widgetId + " remoteViews: " + remoteViews);
    }

imb是ImageButton

有人在这里看错了吗?

编辑:

签入onReceive我得到了非常有趣的结果。如果它看起来像这样:

@Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(TAG,"intent: " + intent.getAction());
        super.onReceive(context, intent);
    }

或者像这样:

@Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(TAG,"intent: " + intent.getAction());
        if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(intent.getAction()))
        {
            Log.d(TAG,"Action");
        }
        super.onReceive(context, intent);
    }

LogCat看起来像这样:

DataAppWidgetProvider(411): intent: android.appwidget.action.APPWIDGET_UPDATE
DataAppWidgetProvider(411): Action

如果没有覆盖,或者在onReceive中超级后,则根本不会调用onUpdate

1 个答案:

答案 0 :(得分:0)

似乎是一个开放的Android问题

http://code.google.com/p/android/issues/detail?id=8889

解决方法 - 在仿真器上按CTRL + F11或更改设备的方向