0

我在这里处理一个奇怪的问题。

基本上,我有一个应用程序(由另一位开发人员制作),它有一个活动,将其 taskAffinity 指定为“”,并将其 launchMode 指定为“singleTask”。

当手机收到通知时,我会在我的应用程序中启动一个带有 FLAG_ACTIVITY_NEW_TASK 标志的活动。

如果任务存在,我希望我的活动具有该其他应用程序的 taskAffinity。

当我这样做时,dumpsys activity我看到其他开发人员应用程序 TaskRecord 是:

aj.streetPhone.app/.ViewActivity

但是,在我的活动清单中,我指定aj.streetphone.app它似乎没有将我的活动添加到该应用程序任务中。我尝试了另一个包名称,它似乎正在工作。问题可能与任务名称包含活动这一事实有关,而不仅仅是包名称(默认值)。

我基本上在使用“/”时遇到问题,因为清单不接受它。

android:taskAffinity="aj.streetPhone.app/.ViewActivity" <--- does not work!

我已经尝试转义由 unicode 添加的“/”,一切。请帮忙!

有任何想法吗?

4

2 回答 2

1

任务关联性(以及权限、进程、共享用户 ID 和操作等)不受应用程序包名称的限制。它们是单个字符串,很多必须是全局唯一的。仅仅添加一个“.foo”并不能让它变得独一无二,因为另一个应用程序的包名可能是你自己的更短或更长的版本,并且也会出现相同的名称。因此,对于关联和进程,您可以在名称中使用“:”前缀将其附加到您自己的包名称中,并创建一个保证您的包唯一的名称。

所以你必须为你的任务亲和性使用一个唯一的字符串。

于 2012-02-27T19:06:13.763 回答
0

/ 确实无效。

除非它以某种方式被缩写(快速查看dumpsys activity我自己的应用程序似乎表明它不是)你的活动的全名是aj.streetPhone.app.ViewActivity. 但是,如果您想将包名称添加到taskAffinity您可以简单地使用冒号,例如:myAffinity. 也就是说,这taskAffinity并不意味着是活动的名称!

据我了解,taskAffinity旨在控制活动属于哪个“任务”。虽然我无法评论为什么您会尝试将 Activity 粘贴到另一个应用程序的任务中,但您可能希望清除关联性以指示该 Activity 可以在任何任务中;虽然我没有尝试过,但我想这会导致,例如,后退按钮会导致返回用户之前进行的任何活动,而不是返回到您的应用程序中上次活动的任何活动(您的任务)。

更多信息(仅供参考,是 chemalarrea 在没有给予信用的情况下引用的地方): https ://groups.google.com/forum/?fromgroups=#!topic/android-developers/wKwnV1k_96A

文档: https ://developer.android.com/guide/topics/manifest/activity-element.html#aff

于 2012-12-14T19:58:56.240 回答