嗨,我有一个与 Android 客户经理有关的问题。我的应用程序向其中注入了一个帐户,因此设备上安装的其他应用程序也可以访问它。我认为一旦任何应用程序向系统询问存储在帐户中的数据,它应该首先询问用户(经典的 android 身份验证屏幕,有两个按钮告诉用户应用程序想要访问该帐户)。但是,我现在就尝试过,我编写了一个简单的应用程序,其目的只是从客户经理那里填充存储的身份验证令牌。有效。它工作得很好,除了没有任何步骤要求用户许可,它只是显示令牌。请问我需要如何将帐户配置为不公开?
以下是我用于访问该帐户的代码。我只使用了帐户的类型和令牌的类型。就这样。
AccountManager accountManager = AccountManager.get(this);
assert accountManager != null;
Account[] kosAccounts = accountManager.getAccountsByType("account_type");
if(kosAccounts.length < 1) tokenView.setText("no account");
else{
accountManager.getAuthToken(kosAccounts[0],"token_type",null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle result = future.getResult();
if(result == null) tokenView.setText("problem");
else{
tokenView.setText(result.getString(AccountManager.KEY_AUTHTOKEN));
}
} catch (OperationCanceledException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (AuthenticatorException e) {
e.printStackTrace();
}
}
}, new Handler());
}
这是我用于创建帐户的代码(来自另一个应用程序)..它实际上是代码的精简版本,我删除了所有你不需要帮助我的杂乱信息:)
final AccountManager accountManager = AccountManager.get(getApplicationContext());
final String username = getUserDataResponse.getString("username");
final String authToken = getUserDataResponse.getString("token"); // null pointer
final Account account = new Account(username, AuthenticatorConfig.ACCOUNT_TYPE);
accountManager.addAccountExplicitly(account, null, null);
accountManager.setAuthToken(account, AuthenticatorConfig.AUTH_TOKEN_TYPE, authToken);