如何获取单个小部件的android小部件ID?

时间:2014-09-18 15:33:28

标签: android

使用以下代码,我们将获得所有Android小部件的列表。

AppWidgetManager appWidgetManager    =   AppWidgetManager.getInstance(context);
ComponentName thisAppWidget = new ComponentName(context,  WidgetProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);

但是我怎么能得到我刚刚点击的小部件的ID?这意味着我有3个或4个小部件,当我点击其中一个时,我需要获取我点击的小部件的ID。

如何获得它? 我试过下面的功能

public static int getWidgetId(Intent intent) {
    Bundle extras = intent.getExtras();
    int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    if (extras != null) {
        appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    return appWidgetId;
}

但那不适合我。

1 个答案:

答案 0 :(得分:0)

我假设您正在为Widget中的一个布局元素设置setOnClickPendingIntent()。只需将appWidgetId设置为Intent的额外内容即可 遵循基本理念:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    int appWidgetId;

    // Create an Intent for every Widget by iterating over the appWidgetIds array
    // appWidgetIds array contains all Widgets
    for (int i = 0; i < N; ++i) {
        appWidgetId = appWidgetIds[i];

        Intent intent = new Intent(context, MyClass.class);
        // Add the appWidgetId to the Intent
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);

        // TODO init RemoteViews
        remoteViews.setOnClickPendingIntent(R.id.myView, pendingIntent);
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

通过执行此操作,您可以在Activity中调用函数 getWidgetId ,并获取相应的appWidgetId。