fornito l'account appartiene alla mia domanda
Questo è, a mio avviso, si intende lo sai account type in anticipo. Se è così, quindi seguire è un possibile approccio per gestire il problema.
Innanzitutto, l'app necessita dell'autorizzazione GET_ACCOUNTS
.
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Poi, se si dà un'occhiata su onActivityCreated()
del AccountSyncSettings
(l'attività sul tuo secondo screenshot), si noterà che sembra per "account"
chiave nel lancio di fascio intento.
@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);
}
Ora, sulla base di questo, si può usare qualcosa come segue per lanciare l'attività per conto specifica:
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);
}
Ci sono, tuttavia, alcune cose da considerare qui:
AccountSyncSettings
l'implementazione può essere modificata in qualsiasi momento.
- Il codice precedente non è stato testato in modo approfondito. Infatti, è stato testato solo su un singolo dispositivo di destinazione (Galaxy S5 con Lollipop).
"android.settings.ACCOUNT_SYNC_SETTINGS"
l'azione potrebbe non essere disponibile su tutti i dispositivi e le versioni di Android. Quindi, salvaguardare possibili fallimenti e cercare azioni alternative.
- Invece di
getAccounts()
, è possibile utilizzare lo getAccountsByType("com.myTLD.myApp")
e utilizzare semplicemente il primo elemento dell'array restituito se l'utente di destinazione non può avere più di un account su un dispositivo.
- Se si conosce account name, è possibile che si desideri sfruttare tali informazioni per ottimizzare ulteriormente la clausola if in base alle proprie esigenze.
Spero che questo aiuti.
Questo può aiutare http://stackoverflow.com/questions/4421527/how-can-i-start-android-application-info-screen-programmatically – yrazlik
@bigO Questo porta l'utente alla pagina delle impostazioni dell'app, non a le impostazioni dell'account per quella app.Grazie comunque. – FWeigl