我是新手,这对我来说是个大难题。我有一个带有提供程序、配置和额外活动的小部件,当您单击小部件时会调用该小部件。我需要确定活动中的小部件 ID。
在提供程序中,我将其设置为使用 .setOnClickPendingIntent 从 onUpdate 调用活动,并在意图中添加小部件 ID。当我尝试从活动中的意图获取小部件 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