6
用下面的衆所周知的代碼,用戶被引導到整個Android設置頁面的設備上的帳戶:意圖去設置頁面特定帳戶
startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS));
是否有等同於使用戶直接訪問特定帳戶的設置(請參閱下面的截圖),前提是該帳戶屬於我的應用程序?
用下面的衆所周知的代碼,用戶被引導到整個Android設置頁面的設備上的帳戶:意圖去設置頁面特定帳戶
startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS));
是否有等同於使用戶直接訪問特定帳戶的設置(請參閱下面的截圖),前提是該帳戶屬於我的應用程序?
提供的帳戶屬於我的應用程序
那是,我想,你的意思是你事先知道account type。如果是這樣,那麼以下是解決問題的一種可能方法。
首先,該應用需要GET_ACCOUNTS
權限。
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
然後,如果你採取的AccountSyncSettings
(你的第二個屏幕的活動)onActivityCreated()
一看,你會發現,它看起來在啓動意圖束"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")
,並簡單地使用返回數組中的第一個元素。希望這有助於。
這可能有助於http://stackoverflow.com/questions/4421527/how-can-i-start-android-application-info-screen-programmatically – yrazlik
@bigO這將用戶帶到應用程序的設置頁面,而不是反正該應用程序的帳戶設置。謝謝。 – FWeigl