pod warunkiem, że konto należy do mojego wniosku
To, jak sądzę, to znaczy wiesz account type wyprzedzeniem. Jeśli tak, to następujące możliwe podejście do rozwiązania problemu.
Po pierwsze, aplikacja będzie potrzebować uprawnienia GET_ACCOUNTS
.
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Następnie, jeśli spojrzeć na onActivityCreated()
z AccountSyncSettings
(aktywność na drugim screenie), można zauważyć, że wygląda na "account"
klucza w rozpoczęciu zamiarem wiązki.
@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);
}
Teraz, w oparciu o które można używać coś jak następuje rozpoczęcie tej działalności dla konkretnego konta:
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);
}
Istnieje jednak kilka rzeczy do rozważenia tutaj:
AccountSyncSettings
Wdrożenie może się zmienić w dowolnym momencie.
- Powyższy kod nie został dokładnie przetestowany. W rzeczywistości testowano go tylko na pojedynczym urządzeniu docelowym (Galaxy S5 z Lollipopem).
"android.settings.ACCOUNT_SYNC_SETTINGS"
akcja może nie być dostępna na wszystkich urządzeniach i wersjach Androida. A więc, zabezpiecz się przed ewentualnymi awariami i szukaj alternatywnych działań.
- Zamiast , możesz faktycznie użyć
getAccountsByType("com.myTLD.myApp")
i po prostu użyć pierwszego elementu z zwróconej tablicy, jeśli docelowy użytkownik nie może mieć więcej niż jedno konto na urządzeniu.
- Jeśli znasz numer account name, możesz wykorzystać tę informację, aby lepiej dostosować klauzulę if do swoich potrzeb.
Mam nadzieję, że to pomoże.
Może to pomóc http://stackoverflow.com/questions/4421527/how-can-i-start-android-application-info-screen-programmatically – yrazlik
@bigO Przenosi użytkownika do strony ustawień aplikacji, a nie do ustawienia konta dla tej aplikacji. Dzięki wszystkim. – FWeigl