Android 无法从具有相同身份验证器的不同应用添加新的自定义帐户
我有两个应用程序都使用相同的自定义帐户类型。这两个应用程序完全独立,只需共享一个帐户。当其中一个帐户启动时,它会检查现有的自定义帐户,如果没有找到帐户,则显示登录页面 因此,我创建了我的Android 无法从具有相同身份验证器的不同应用添加新的自定义帐户,android,account,accountmanager,android-account,android-authenticator,Android,Account,Accountmanager,Android Account,Android Authenticator,我有两个应用程序都使用相同的自定义帐户类型。这两个应用程序完全独立,只需共享一个帐户。当其中一个帐户启动时,它会检查现有的自定义帐户,如果没有找到帐户,则显示登录页面 因此,我创建了我的AccountAuthenticator作为一个库项目,并在两个应用程序中引用它。据此: 假设您将验证器的代码复制到两个应用程序中,因此 共享其逻辑,并更改每个应用程序上的登录页面设计 以适合它所属的应用程序。在这种情况下,第一个安装的应用程序 当验证令牌将被激活时,将为这两个应用调用验证器 请求。如果卸载第一个
AccountAuthenticator
作为一个库项目,并在两个应用程序中引用它。据此:
假设您将验证器的代码复制到两个应用程序中,因此
共享其逻辑,并更改每个应用程序上的登录页面设计
以适合它所属的应用程序。在这种情况下,第一个安装的应用程序
当验证令牌将被激活时,将为这两个应用调用验证器
请求。如果卸载第一个应用程序,则第二个应用程序
从现在起将调用验证器(因为它是唯一的验证器)
现在)
当我运行其中一个应用程序(无论哪个应用程序)并调用addAccount
时,它会很好地显示登录页面然后,当我运行第二个应用程序并调用addAccount
时,什么都没有发生,登录页面也没有显示。卸载第一个应用程序后,第二个应用程序正常工作并显示登录页面。那么问题是什么?我如何解决它?
addAccount
的实现:
mAccountManager.addAccount(accountType, authTokenType, null, null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bnd = future.getResult();
showMessage("Account was created");
} catch (Exception e) {
e.printStackTrace();
showMessage(e.getMessage());
}
}
}, null);
mAccountManager.addAccount(accountType,authTokenType,null,null,this,new AccountManagerCallback()){
@凌驾
公共作废运行(AccountManagerFuture){
试一试{
Bundle bnd=future.getResult();
showMessage(“已创建帐户”);
}捕获(例外e){
e、 printStackTrace();
showMessage(如getMessage());
}
}
},空);
提前感谢我不确定这是正确的答案,但我发现问题在于应用程序有不同的UID。因此,我在两个应用程序中都使用了
sharedUserId
,问题得到了解决:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:sharedUserId="test.account"
android:versionCode="100"
android:versionName="1.0" >
@Misagh Emamverdi是的。您的清单中缺少该权限 android:sharedUserId 将与其他应用程序共享的Linux用户ID的名称。默认情况下,Android为每个应用程序分配其唯一的用户ID。但是,如果两个或多个应用程序的此属性设置为相同的值,则它们将共享相同的ID,前提是它们也由相同的证书签名 具有相同用户ID的应用程序可以访问彼此的数据,如果需要,可以在同一进程中运行 因此,android:sharedUserId用于在两个或多个应用程序之间共享进程(如) 语法
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
. . .
找到这篇写得很好的文章