繁体   English   中英

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

[英]How to get android widget id of a single widget?

使用下面的代码,我们可以获得我们拥有的所有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;
}

但这对我不起作用。

我假设您正在将setOnClickPendingIntent()设置为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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM