gpt4 book ai didi

android - 无法让我的 AccountAuthenticatorActivity 在两个不同的应用程序中打开

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:09 24 4
gpt4 key购买 nike

我正在尝试编写自己的 Authenticator 并将其用作两个不同应用程序的库:A 和 B。我关注了这篇文章:http://udinic.wordpress.com/2013/04/24/write-your-own-android-authenticator/ .我安装了应用程序 A,然后安装了应用程序 B。当应用程序 A 调用 AccountManager.addAccount() 时,AccountAuthenticatorActivity 打开。当应用程序 B 调用 AccountManager.addAccount() 时,什么也没有发生。如果我卸载应用 A 并在应用 B 中重试,AccountAuthenticatorActivity 将打开。

我的目标是对这两个应用程序使用相同的 AccountAuthenticatorActivity 和 AccountAuthenticator,但它似乎一次只能在一个应用程序上工作。

这是我的 AbstractAccountAuthenticator 中的 addAccount:

 @Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {

final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
intent.putExtra(AuthenticatorActivity.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(AuthenticatorActivity.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(AuthenticatorActivity.ARG_IS_ADDING_NEW_ACCOUNT, true);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

final Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}

这就是我从我的两个应用程序调用 accountManager.addAccount() 的方式:

 private void addNewAccount(String accountType, String authTokenType) {
final AccountManagerFuture<Bundle> future = mAccountManager.addAccount(accountType, authTokenType, null, null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bnd = future.getResult();

} catch (Exception e) {
e.printStackTrace();

}
}
}, null);
}

最佳答案

我遇到了同样的问题,所有这些困惑的关键是 AndroidManifest.xml

有关如何创建自定义身份验证器的教程有些陈旧(或至少是 Android Studio 之前的版本),因此它们声明您必须将权限、 Activity 和服务从身份验证器库复制到所有将要使用库 这对于 ANDROID STUDIO 是错误的 因为 Android Studio 会自动合并来自所有模块的 list 。

如果您使用的是 Android Studio,那么您需要做的就是让身份验证器模块中的权限、 Activity 和服务,并简单地在应用程序中添加对该模块的依赖。

这是一个示例 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:allowBackup="true"
android:label="@string/auth_app_name"
android:theme="@style/Holo.Theme.Light.DarkActionBar">

<activity
android:name="ro.muerte.modules.auth.MyAuthenticatorActivity"
android:exported="true"
android:label="@string/auth_action_login"
android:windowSoftInputMode="adjustResize|stateVisible"
android:clearTaskOnLaunch="true" />


<service
android:name="ro.muerte.modules.auth.MyAuthenticateService"
android:exported="true">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>

</application>

关于android - 无法让我的 AccountAuthenticatorActivity 在两个不同的应用程序中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com