编程语言
首页 > 编程语言> > java – 将自定义AccountAuthenticator与多个应用程序一起使用

java – 将自定义AccountAuthenticator与多个应用程序一起使用

作者:互联网

我有2个独立的Android项目,一个是用于管理设备中用户帐户的AbstractAccountAuthenticator的实现,另一个是应该从AccountAuthenticator获取令牌并使用它的推送应用程序.

AbstractAccountAuthenticator的实现正在工作,并在“设置”菜单中的“帐户和同步”部分调用时添加帐户,但是当我从推送应用程序调用addAccount()时,我得到“权限被拒绝:checkComponentPermission()”和应用程序在那里死

我不能提供很多源代码,因为我不能让它公开,但我向你保证他们以“独立”的方式工作.

我已经搜索了从不同的应用程序正确使用AccountManager的示例,但没有找到. freenode也没有运气.

我发现从AccountAuthenticator中启动活动(使用Intent.FLAG_NEW_TASK和context.startActivity(intent))可以解决问题,但这意味着addAccount()不会返回到AccountManager,我认为不会与开发指南保持一致,因为它打破了AccountManager使用的流程.另一种方法是导出在请求用户凭据时使用的Acitivity.但我认为这可能是一个安全问题,因为它应该由AccountManager调用,而不是外部调用.

感谢您对此有任何想法.

PS:

>所有权限都已正确使用,除非我需要一个我不知道可以跨应用程序工作的特殊权限.
>我会问我是否可以使用代码片段来显示我关注的行.
>第一个问题发布在这里,我希望我没有违反(m)这里的任何规则(我在这里和谷歌进行了搜索,但我问过,因为我发现没有任何用处.)
>谢谢.

深入Google的登录服务并绊倒了Settings类之后,我发现了我认为应该是解决方案:

>不要导出东西,我一直认为调用你的实现,服务或活动,绕过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参数,一个包含要显示的权限的字符串,它会将选项限制为您想要的选项.如果只有一个与您的额外匹配,则以适当的方式调用客户经理和登录活动.

我真的希望这可以帮助周围的任何人.

解决方法:

深入Google的登录服务并绊倒了Settings类之后,我发现了我认为应该是解决方案:

>不要导出东西,我一直认为调用你的实现,服务或活动,绕过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参数,一个包含要显示的权限的字符串,它会将选项限制为您想要的选项.如果只有一个与您的额外匹配,则以适当的方式调用客户经理和登录活动.

我真的希望这可以帮助周围的任何人.

标签:accountmanager,android,java
来源: https://codeday.me/bug/20190729/1568422.html