gpt4 book ai didi

java - addAccount 未从 MainActivity 的 AbstractAccountAuthenticator 实现中调用

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

我正在关注 tutorial用于将用户帐户添加到 Android AccountManager。

在我的主要 Activity 中,我有以下方法:

private void addNewAccount(String accountType, String authTokenType) {
Log.d(TAG,"addNewAccount called");
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();
Log.d("ACME", "AddNewAccount Bundle is " + bnd);

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

正在调用此方法,正如我在 logcat 中看到的日志。现在我的 AbstractAccountAuthenticator 实现如下:

public class AcmeAuthenticator extends AbstractAccountAuthenticator {

private String TAG = "AcmeAuthenticator";
private final Context mContext;

public AcmeAuthenticator(Context context) {
super(context);
this.mContext = context;
}

@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
Log.d("acme", TAG + "> addAccount");

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;
}

永远不会调用上述方法。以下是我为其创建的服务:

public class AcmeAuthenticatorService extends Service {
@Override
public IBinder onBind(Intent intent) {

AcmeAuthenticator authenticator = new AcmeAuthenticator(this);
return authenticator.getIBinder();
}
}

我的 list 定义如下:

<activity android:name="com.exercise.accountmanagerstudy.accountAuthenticator.AuthenticatorActivity" android:label="@string/login_label"/>
<service android:name=".accountAuthenticator.AcmeAuthenticatorService">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
<!-- client -->
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>

<!-- Authenticator -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>

我没有收到编译器错误,未调用 AbstractAccountAuthenticator 实现中的 addAccount 覆盖。来自主要 Activity 的 addNewAccount 方法。我已经研究了一些链接 herehere .任何帮助将不胜感激。

最佳答案

好吧,所以我终于弄明白了。显然,AcmeAuthenticator 的 authenticator.xml 文件有一个名为 accountType 的字段:

<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.exercise.accountmanagerstudy"
android:icon="@drawable/ic_launcher"
android:smallIcon="@drawable/ic_launcher"
android:label="@string/label"
android:accountPreferences="@xml/prefs"/>

当我在我的主要 Activity 中调用 addNewAccount 时,我应该将上述 xml 中的 accountType 的确切值作为 accountType 参数传递。 ew,这花了我很多时间,希望它能帮助别人 :-)。

关于java - addAccount 未从 MainActivity 的 AbstractAccountAuthenticator 实现中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196282/

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