您好我有一个与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);
答案 0 :(得分:1)
好的,答案很简单..证书很重要!如果这些应用程序使用不同的证书签名,则会出现屏幕。