无法在Activity中获取Widget ID

时间:2013-03-30 23:43:18

标签: java android android-widget

我是新手,对我来说这是一件非常头痛的事。我有一个带有提供者的小部件,一个配置和一个额外的活动,当你点击小部件时会调用它。我需要确定活动中的小部件ID。

在提供程序中,我将其设置为使用.setOnClickPendingIntent从onUpdate调用活动,并在意图中添加窗口小部件ID。当我尝试从活动中的intent获取窗口小部件ID时,它始终为0(但活动称为正常)。我可以在配置中检索ID,但不能在具有相同代码的活动中检索。

我确信这将是一些基本的/业余的错误。感谢您的帮助!

截断代码:

提供者:

public static String ACTION_WIDGET_CLICK = "ClickWidget";


    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        ComponentName thisWidget = new ComponentName(context,
        HelloWidgetProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
        for (int widgetId : allWidgetIds) {
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            Intent clickIntent = new Intent(context, test.class);
            clickIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
            clickIntent.setAction(ACTION_WIDGET_CLICK);
            PendingIntent clickPendingIntent = PendingIntent.getActivity(context, 0, clickIntent, 0);
            views.setOnClickPendingIntent(R.id.update, clickPendingIntent);
            appWidgetManager.updateAppWidget(widgetId, views);
        }
    }

所以点击它会调用pendingIntent,它会调用ACTION_WIDGET_CLICK定义的活动。的清单:

<activity android:name=".test">
<intent-filter>
<action
android:name="com.example.widget_create.HelloWidgetProvider.ACTION_WIDGET_CLICK"/>
</intent-filter>
</activity>

所以这称为测试行为:

public class test extends Activity {

    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent clickIntent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {         
            mAppWidgetId = extras.getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
        }
    }

它没有收到额外内容,然后小部件ID被设置为0

3 个答案:

答案 0 :(得分:0)

您可以将收到的内容复制/粘贴到控制台日志中吗?

检查你的Manifest文件中的android:name标签,它必须是android:name =“。Test”,大写。

答案 1 :(得分:0)

onUpdate,您正在传递IDS(ID数组)

clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

在您的活动中,您要求提供身份证(只有一个身份证)

mAppWidgetId = extras.getInt(
    AppWidgetManager.EXTRA_APPWIDGET_ID,
    AppWidgetManager.INVALID_APPWIDGET_ID);

当你在for循环中使用每个小部件ID时,你应该改变提供者的意图:

clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);

请注意EXTRA_APPWIDGET_IDwidgetId值,而不是旧的appWidgetIds

答案 2 :(得分:0)

如果getExtras在(例如)活动中给出相同的值,则必须更改requestCode(可能更改为widgetid)

Intent clickIntent = new Intent(context,ActivityName.class);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,myWidgetId);
PendingIntent pendingIntent = PendingIntent.getActivity(context, myWidgetId, clickIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.layout,pendingIntent);