2015-05-26 15 views
6

z następującymi znanego kodu, użytkownik zostanie przeniesiony do ogólnej stronie ustawień Android dla kont na urządzeniu:Intent, aby przejść do strony ustawień dla konkretnego konta

startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS)); 

sync settings

Czy istnieje odpowiednik, który przenosi użytkownika bezpośrednio do ustawień dla konkretnego konta (patrz zrzut ekranu poniżej), pod warunkiem, że konto należy do mojej aplikacji?

specific account sync settings

+0

Może to pomóc http://stackoverflow.com/questions/4421527/how-can-i-start-android-application-info-screen-programmatically – yrazlik

+0

@bigO Przenosi użytkownika do strony ustawień aplikacji, a nie do ustawienia konta dla tej aplikacji. Dzięki wszystkim. – FWeigl

Odpowiedz

2

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.

Powiązane problemy