我有两个独立的Android项目,一个是用于管理设备中用户帐户的AbstractAccountAuthenticator的实现,另一个是应该从AccountAuthenticator获取令牌并使用它的推送应用程序。
AbstractAccountAuthenticator的实现正在工作,并在“设置”菜单中的“帐户和同步”部分调用时添加帐户,但是当我从推送应用程序调用addAccount()时,我得到“权限被拒绝:checkComponentPermission() “应用程序在那里死了。
我无法提供很多源代码,因为我不能让它公开,但我向你保证,它们是以“独立”的方式工作。
我已经搜索了从不同应用程序正确使用AccountManager的示例,但没有找到。 freenode也没有运气。
我发现从AccountAuthenticator中启动活动(使用Intent.FLAG_NEW_TASK和context.startActivity(intent))可以解决问题,但这意味着addAccount()不会返回到AccountManager,我认为不符合开发指南,因为它打破了AccountManager使用的流程。另一种方法是导出在请求用户凭据时使用的Acitivity。但我认为这可能是一个安全问题,因为它应该由AccountManager调用,而不是外部调用。
感谢您对此有任何想法。
PS:
所有权限都已正确使用,除非我需要一个我不知道可以跨应用程序工作的特殊权限。
我会问我是否可以使用代码片段来显示我所关注的行。
第一个问题发布在这里,我希望我没有违反(m)这里的任何规则(我在这里和谷歌进行了搜索,但我问过,因为我发现没有任何用处。)
< / LI>谢谢。
深入Google的登录服务深入探索设置课程后,我发现了我认为应该解决的问题:
不要导出内容,我一直认为调用您的实现,服务或活动,绕过AccountManager是一个安全问题。
请勿在{{1}}的实施中使用Intent.FLAG_NEW_TASK
和startActivity()
,因为它可能会导致您出现意外行为。
实现这一点的方法很简单,实际上是:
AbstractAccountAuthenticator
这样,您要求设置提升新帐户,总线的可能权限列表,因为您要添加EXTRA_AUTHORITIES参数,一个包含要显示的权限的字符串,它会将选项限制为您想要的选项。如果只有一个与您的额外匹配,则以适当的方式调用客户经理和登录活动。
我真的希望这可以帮助周围的任何其他人。
答案 0 :(得分:7)
深入Google的登录服务深入探索设置课程后,我发现了我认为应该解决的问题:
不要导出内容,我一直认为调用您的实现,服务或活动,绕过AccountManager是一个安全问题。
请勿在{{1}}的实施中使用Intent.FLAG_NEW_TASK
和startActivity()
,因为它可能会导致您出现意外行为。
实现这一点的方法很简单,实际上是:
AbstractAccountAuthenticator
这样,您要求设置提升新帐户,总线的可能权限列表,因为您要添加EXTRA_AUTHORITIES参数,一个包含要显示的权限的字符串,它会将选项限制为您想要的选项。如果只有一个与您的额外匹配,则以适当的方式调用客户经理和登录活动。
我真的希望这可以帮助周围的任何其他人。