2

以下场景:我的主屏幕上有 3 个相同的小部件。如果单击,则会启动小部件配置活动。

这是通过以下代码实现的:

Intent intent = new Intent(context, WidgetConfigurator.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);

启动正常,但是有一个问题:
1. Widget A 被点击,Widget A 的配置活动被打开
2. 用户点击“返回”键,配置活动消失
3. Widget B 被点击,Widget B 的配置活动是打开
4. 用户点击“返回”键
=> 现在显示 Widget A 的配置活动

我总是只希望显示“实际”配置活动(适合单击的小部件)。我必须为 Intent / PendingIntent 使用哪些设置?

谢谢任何帮助

4

3 回答 3

3

似乎在尝试了很多之后,我现在找到了适用于所有 android 版本的工作解决方案:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_linearlayout, pendIntent);
于 2012-11-25T19:01:02.053 回答
3

更改待处理的意图代码以包含小部件 ID,因为 android 会重用意图。我在这个问题上浪费了很多时间,点击时发送了错误的意图。

PendingIntent pendIntent = PendingIntent.getActivity(context, WIDGETID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
于 2012-11-30T07:47:39.963 回答
0

确保当前活动关闭的一种方法是调用 finish()。一个 android 应用程序像堆栈一样构建,活动 A 启动,如果用户回击,则该活动不会关闭。它只是位于新启动的活动 B 下。如果用户在活动 B 中回击,则将显示活动 A。我从未尝试过,但是如果您在 onBackPressed 方法中调用完成,则当前活动将被关闭。为此,请在 Activity 中覆盖 onBackPressed。

于 2012-11-25T14:07:07.690 回答