使用以下众所周知的代码,用户将被带到设备上帐户的整体 Android 设置页面:
startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS));
如果该帐户属于我的应用程序,是否有等效项可以将用户直接带到特定帐户的设置(请参见下面的屏幕截图)?
使用以下众所周知的代码,用户将被带到设备上帐户的整体 Android 设置页面:
startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS));
如果该帐户属于我的应用程序,是否有等效项可以将用户直接带到特定帐户的设置(请参见下面的屏幕截图)?
如果该帐户属于我的应用程序
也就是说,我认为,您的意思是您提前知道帐户类型。如果是这样,那么以下是处理问题的一种可能方法。
首先,该应用程序需要GET_ACCOUNTS
许可。
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
然后,如果您查看(第二个屏幕截图上onActivityCreated()
的AccountSyncSettings
活动),您会注意到它"account"
在启动意图包中查找密钥。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle arguments = getArguments();
if (arguments == null) {
Log.e(TAG, "No arguments provided when starting intent. ACCOUNT_KEY needed.");
finish();
return;
}
mAccount = (Account) arguments.getParcelable(ACCOUNT_KEY);
if (!accountExists(mAccount)) {
Log.e(TAG, "Account provided does not exist: " + mAccount);
finish();
return;
}
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Got account: " + mAccount);
}
mUserId.setText(mAccount.name);
mProviderId.setText(mAccount.type);
}
现在,基于此,您可以使用以下内容为特定帐户启动该活动:
private static final String ACCOUNT_KEY = "account";
private static final String ACTION_ACCOUNT_SYNC_SETTINGS =
"android.settings.ACCOUNT_SYNC_SETTINGS";
... // lots of code
Account myAccount = null;
AccountManager accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccounts();
for (Account account : accounts) {
if ("com.myTLD.myApp".equals(account.type)) {
myAccount = account;
break;
}
}
if (myAccount != null) {
Bundle args = new Bundle();
args.putParcelable(ACCOUNT_KEY, myAccount);
Intent intent = new Intent(ACTION_ACCOUNT_SYNC_SETTINGS);
intent.putExtras(args);
startActivity(intent);
}
但是,这里有几件事需要考虑:
AccountSyncSettings
实施可能随时更改。"android.settings.ACCOUNT_SYNC_SETTINGS"
操作可能不适用于所有设备和 Android 版本。因此,请防范可能的故障并寻找替代措施。getAccounts()
。getAccountsByType("com.myTLD.myApp")
希望这可以帮助。