使用自定义AccountAuthenticator我有2个独立的Android项目,一个是AbstractAccountAuthenticator的实施在设备管理用户帐户,另一种是推送应用程序应该从AccountAuthenticator获得令牌,并使用它。与多个应用程序
AbstractAccountAuthenticator的实现工作,并在“设置”菜单中的“帐户和同步”部分调用时添加帐户,但是当我从推送应用程序调用addAccount()时,我得到“权限被拒绝:checkComponentPermission( )“和应用程序在那里死去。
我不能提供太多的源代码,因为它不是我的力量,使其能够上市,但我向你保证,他们在一个“独立”的方式工作。
我从不同的应用程序中搜索了正确使用AccountManager的例子,但没有找到任何例子。 freenode也没有运气。
我发现从AccountAuthenticator内部启动活动(使用Intent.FLAG_NEW_TASK和context.startActivity(intent))会诀窍,但这意味着addAccount()不会返回到AccountManager,而我认为这与开发指南不一致,因为它违反了AccountManager使用流程。另一种方式是导出请求用户凭据时使用的Acitivity。但我认为这可能是一个安全问题,因为它应该由AccountManager调用,而不是外部。
谢谢你对此有任何想法。
PS:
所有的权限被正确地使用,除非我需要一个特殊的一个,我不知道整个应用程序的工作。
我会问,如果我可以使用的代码片段显示在这里我很关心的线条。
这里第一个问题贴出来,我希望我没有违反(米)的任何规则在这里(我做搜索这里和谷歌,但我问,因为我发现没有什么用的。)
谢谢您。
潜水到谷歌的登录服务后,应设置类磕磕绊绊,我已经找到了我想应该是解决方案:
不出口的东西,我一直在想这是一个安全问题来绕过您的实施,成为服务或活动,绕过AccountManager。
请勿在执行
AbstractAccountAuthenticator
时使用Intent.FLAG_NEW_TASK
和startActivity()
,因为它会将您带到意想不到的行为。
做,这是非常简单的方式,实际上是:
Intent i = new Intent(Settings.ACTION_ADD_ACCOUNT);
i.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { "com.exaple.yourauth" });
contextVar.startActivity(i);
这样,你所要求的设置,以提高可能的机构的名单一个新的帐户,公交车,因为你加入EXTRA_AUTHORITIES参数,一个有权限显示的字符串,它将选项限制为你想要的。如果只有一个符合您的额外要求,则会以适当的方式调用客户经理和登录活动。
我真的希望这可以帮助周围的任何其他人。