2013-03-22 81 views
3

使用自定义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_TASKstartActivity(),因为它会将您带到意想不到的行为。

做,这是非常简单的方式,实际上是:

Intent i = new Intent(Settings.ACTION_ADD_ACCOUNT); 
i.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { "com.exaple.yourauth" }); 
contextVar.startActivity(i); 

这样,你所要求的设置,以提高可能的机构的名单一个新的帐户,公交车,因为你加入EXTRA_AUTHORITIES参数,一个有权限显示的字符串,它将选项限制为你想要的。如果只有一个符合您的额外要求,则会以适当的方式调用客户经理和登录活动。

我真的希望这可以帮助周围的任何其他人。

回答

7

潜水到谷歌的登录服务后,应设置类磕磕绊绊,我已经找到了我想应该是解决方案:

  • 不出口的东西,我一直在想这是一个安全问题调用的东西您的实施,成为一项服务或活动,绕过AccountManager。

  • 请勿在执行AbstractAccountAuthenticator时使用Intent.FLAG_NEW_TASKstartActivity(),因为它会将您带到意想不到的行为。

做,这是非常简单的方式,实际上是:

Intent i = new Intent(Settings.ACTION_ADD_ACCOUNT); 
i.putExtra(Settings.EXTRA_AUTHORITIES, new String[] { "com.exaple.yourauth" }); 
contextVar.startActivity(i); 

这样,你所要求的设置,以提高可能的机构的名单一个新的帐户,公交车,因为你加入EXTRA_AUTHORITIES参数,一个有权限显示的字符串,它将选项限制为你想要的。如果只有一个符合您的额外要求,则会以适当的方式调用客户经理和登录活动。

我真的希望这可以帮助周围的任何其他人。