以下场景: 我的主屏幕上有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.单击小部件A,打开小部件A的配置活动
2.用户点击“返回”键,配置活动消失
3.单击小部件B,打开小部件B的配置活动
4.用户点击“后退”键
=>现在,Widget A的配置活动显示为
我总是只想要显示“实际”配置活动(适合被点击的小部件)。我必须使用哪些设置用于Intent / PendingIntent?
thx任何帮助
答案 0 :(得分:3)
更改您的待定意图代码以包含小部件ID,因为android重用了意图。我浪费了很多时间,因为点击发送了错误的意图。
PendingIntent pendIntent = PendingIntent.getActivity(context, WIDGETID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
答案 1 :(得分:2)
在尝试了很多之后似乎我现在找到了适用于所有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);
答案 2 :(得分:0)
确保当前活动关闭的一种方法是调用finish()。 Android应用程序构建为堆栈,活动A启动,如果用户回击,此活动不会关闭。它只是位于新启动的活动B下。如果用户回到活动B,则会显示活动A.我从未尝试过这个,但是如果你在onBackPressed方法中调用finish,那么当前活动将被关闭。为此,请在“活动”中覆盖onBackPressed。