多个小部件:在小组件单击时启动配置活动

时间:2012-11-25 11:22:55

标签: android

以下场景: 我的主屏幕上有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任何帮助

3 个答案:

答案 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。