使用以下代码,我们将获得所有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;
}
但那不适合我。
答案 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。