Android AppWidget配置 - 在新任务中启动

3
我已经搜索了很久!
所以我有一个应用程序小部件,它有一个配置活动,我可以在应用程序上按按钮时打开。场景如下:
- 应用程序已打开。 - 使用主页按钮关闭了应用程序。 - 选择添加我的小部件。 - 我已经配置好了小部件。 - 放置在我的主屏幕上。 - 然后再次使用小部件上的按钮打开配置活动。 - 按下返回键取消新配置将使我回到应用程序。
当按下返回键时,我想直接返回主屏幕。
基本上我想问的是,如何在自己的任务/堆栈中启动配置活动?
我已经研究了意图过滤器,但我不太确定,也许与它所在的包有关,或者可能根本不可能!
我想这可能与我用来启动配置活动的意图有关。
 Intent configIntent = new Intent(this, Configuration.class);
 configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      
 remoteView.setOnClickPendingIntent(R.id.config, PendingIntent.getActivity(this, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT));

也许是因为我使用'this'作为上下文来启动它,所以它总是在我的应用程序堆栈中启动... 但是pending intent API是这样的: PendingIntent API 1 “请注意,活动将在没有现有活动的上下文之外启动”
所以,我现在就不说话了,因为我会陷入循环!
编辑
因此,在清单中尝试了'android:launchMode="singleInstance"',这确实起作用,但它会阻止'startActivityForResult'的行为正常工作。(这就是配置活动的全部原因)会出现以下错误:
警告/ActivityManager(59):由于作为新任务启动活动,因此取消活动结果。
所以仍然没有找到解决办法。
2个回答

9
好的,我来翻译一下 :-) 需要做以下事情:
android:taskAffinity=""

在清单文件中,将任务亲和性(task affinity)设置为空字符串,允许活动在自己的堆栈(stack)中启动,因为它与应用程序的其余部分没有'关联'。
更新:
我已将任务亲和性更改为:     android:taskAffinity =“com.my.package.alternative.task” 每次启动活动时,它都会显示在“历史记录”中多次。 因此,它现在在自己的堆栈中启动,但与相同活动的其他实例共享。
还需要在意图中添加Flag Intent.FLAG_ACTIVITY_NO_HISTORY :-) 这样可以防止在“按住”主页按钮时在历史记录中多次获取您的应用程序。
更新:
我注意到FLAG_ACTIVITY_NO_HISTORY并没有做我想要的事情,所以我已经将其删除并添加了:
android:excludeFromRecents="true"

将活动标签添加到清单中。现在活动的行为符合我的要求 :-) 从以下链接中获得此答案: 任务和返回堆栈 | 管理任务 | 关联标记

我遇到了同样的问题,感谢您在这里发布解决方案。现在我的问题已经得到解决,使用了您的解决方案! - Ben Lee

1
尝试在AndroidManifest.xml文件中为应用程序的一个活动设置android:launchMode="singleInstance"。

实际上这并没有解决问题。现在出现了以下警告:WARN/ActivityManager(59): Activity is launching as a new task, so cancelling activity result. 这会导致配置活动无法按照预期的方式工作! :-( - Blundell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接