我有两个使用相同自定义帐户类型的应用。这两个应用程序是完全独立的,只是共享帐户。当其中一个启动时,它会检查现有的自定义帐户,如果未找到任何帐户,则会显示登录页面。
所以我创建了我的>>>sorted([('Gold', 2), ('Bronze', 1), ('Gold', 1)], key=mapper(custom_key))
[('Gold', 1), ('Gold', 2), ('Bronze', 1)]
作为库项目并在两个应用程序中引用它。根据这个{{3}}:
假设您将验证者的代码复制到了2个应用中 分享其逻辑,并改变每个应用程序上的登录页面设计 以适应它所属的应用程序。在这种情况下,第一个安装的应用程序 当auth-token出现时,将为两个应用程序调用authenticator 请求。如果你卸载第一个应用程序,第二个应用程序 将从现在开始调用authenticator(因为它是唯一的一个 现在)。
当我运行其中一个应用程序(无论哪个应用程序)并致电map
时,它会很好地显示登录页面。 然后,当我运行第二个应用并致电>>> sorted([('Gold', 2), ('Bronze', 1), ('Gold', 1)], key=functools.partial(map, custom_key))
[('Gold', 1), ('Gold', 2), ('Bronze', 1)]
时,没有任何反应,并且未显示登录页面。卸载第一个应用程序后,第二个应用程序正常工作并显示登录页面。那么问题是什么?我该如何解决?
AccountAuthenticator
的实施:
addAccount
提前致谢
答案 0 :(得分:4)
@Misagh Emamverdi 是的。你在清单中遗漏了这个许可。
将与其他应用程序共享的Linux用户标识的名称。默认情况下,Android会为每个应用程序分配自己唯一的用户ID。但是,如果将此属性设置为两个或多个应用程序的相同值,则它们将共享相同的ID - 前提是它们也由相同的证书签名。
具有相同用户ID的应用程序可以访问彼此的数据,并且如果需要,可以在同一进程中运行。
所以 android:sharedUserId 用于在两个或多个应用程序之间共享进程(如Udinic Authenticator)。
<强>语法强>
<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"] >
. . .
答案 1 :(得分:3)
我不确定这是正确答案,但我发现问题是应用程序有不同的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" >