Mis*_*rdi 11 account android accountmanager android-authenticator android-account
我有两个使用相同自定义帐户类型的应用.这两个应用程序是完全独立的,只是共享帐户.当其中一个启动时,它会检查现有的自定义帐户,如果未找到任何帐户,则会显示登录页面.
所以我创建了我AccountAuthenticator
的图书馆项目并在两个应用程序中引用它.根据本教程:
假设您将验证者的代码复制到了2个应用程序中,从而共享其逻辑,并更改每个应用程序上的登录页面设计以适合其所属的应用程序.在这种情况下,当请求auth-token时,将为两个应用程序调用第一个安装的应用程序的身份验证器.如果您卸载第一个应用程序,将从现在开始调用第二个应用程序的身份验证器(因为它现在是唯一的一个).
当我运行其中一个应用程序(无论哪个应用程序)并调用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);
Run Code Online (Sandbox Code Playgroud)
提前致谢
@Misagh Emamverdi 是的。您在清单中缺少该权限。
\n\n将与其他应用程序共享的 Linux 用户 ID 的名称。默认情况下,Android 为每个应用程序分配其自己唯一的用户 ID。但是,如果两个或多个应用程序将此属性设置为相同的值,则它们将共享相同的 ID \xe2\x80\x94,前提是它们也由相同的证书签名。
\n\n具有相同用户 ID 的应用程序可以访问彼此的数据,并且如果需要,可以在同一进程中运行。
\n\n因此android:sharedUserId用于在两个或多个应用程序之间共享进程(例如Udinic Authenticator)。
\n\n句法
\n\n<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n package="string"\n android:sharedUserId="string"\n android:sharedUserLabel="string resource" \n android:versionCode="integer"\n android:versionName="string"\n android:installLocation=["auto" | "internalOnly" | "preferExternal"] >\n. . .\n
Run Code Online (Sandbox Code Playgroud)\n\n\n
我不确定这是否是正确的答案,但我发现问题在于应用程序具有不同的 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" >
Run Code Online (Sandbox Code Playgroud)