i (скажем, приложение «C») пытается получить токен аутентификации установленного приложения (скажем, «S») через функцию getAuthToken для учетной записи Android AccountManager.Android AccountManager's getAuthToken SecurityException
эта функция не работает, как ожидалось, он не возвращает никаких результатов (функция запуска никогда не называется)
AccountManagerFuture<Bundle> future1 = AccountManager.get(Main2.this).getAuthToken(account,account.type,null,false, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
Bundle result = null;
try {
result = future.getResult();
String check = "";
}
catch (OperationCanceledException e){ }
catch (IOException e1){}
catch (AuthenticatorException e2){}
}
} , new Handler(Looper.getMainLooper()));
, когда я вижу устройство ADB Logs, я вижу следующие
java.lang.SecurityException: Activity to be started with KEY_INTENT must share Authenticator's signatures
at com.android.server.accounts.AccountManagerService$Session.onResult(AccountManagerService.java:2580)
at com.android.server.accounts.AccountManagerService$6.onResult(AccountManagerService.java:1677)
at com.android.server.accounts.AccountManagerService$6.onResult(AccountManagerService.java:1652)
at android.accounts.IAccountAuthenticatorResponse$Stub.onTransact(IAccountAuthenticatorResponse.java:59)
Приложения «C» и «S», описанные выше, не связаны друг с другом, поэтому они подписаны с разными сертификатами.
Я угадываю, что функция должна была работать в описанном выше сценарии (что является одной из основных целей AccountManager - Совместное использование токенов доступа к учетным записям в приложениях) (с диалоговым окном безопасности, предоставленным пользователю, разрешить ли ему разрешить «C» для доступа к «S»), почему он не работает? Мне что-то здесь не хватает?
Благодаря
У вас есть решение по сценарию, о котором вы упомянули. Потому что я тоже застрял здесь. Пожалуйста, предоставьте свое решение, если вы его исправили. Спасибо –