2015-05-26 6 views
6

Mit dem folgenden bekannten Code, der Benutzer auf die gesamte Android-Einstellungen Seite für Konten auf dem Gerät genommen wird:Intent zur Einstellungsseite für bestimmtes Konto gehen

startActivity(new Intent(Settings.ACTION_SYNC_SETTINGS)); 

sync settings

Gibt es ein Äquivalent, das den Benutzer direkt zu den Einstellungen für ein bestimmtes Konto führt (siehe Screenshot unten), sofern das Konto zu meiner Anwendung gehört?

specific account sync settings

+0

Dies kann helfen http://stackoverflow.com/questions/4421527/how-can-i-start-android-application-info-screen-programmatically – yrazlik

+0

@bigO Dies führt den Benutzer auf die Einstellungsseite der App, nicht zu die Kontoeinstellungen für diese App. Danke sowieso. – FWeigl

Antwort

2

das Konto zur Verfügung gestellt, um meine Anwendung

Das ist, glaube ich gehört, du meinst du account type im Voraus mit. Wenn dies der Fall ist, dann ist das folgende ein möglicher Ansatz, um das Problem zu lösen.

Zuerst wird die App GET_ACCOUNTS Erlaubnis benötigen.

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

Dann, wenn Sie einen Blick auf onActivityCreated() von AccountSyncSettings (die Aktivität auf dem zweiten Screenshot) nehmen, werden Sie feststellen, dass es für "account" Schlüssel in der Einleitung Absicht Bündel aussieht. Jetzt

@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); 
} 

, bezogen auf das, können Sie etwas verwenden, da diese Tätigkeit für bestimmtes Konto starten folgt:

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); 
} 

Es gibt jedoch ein paar Dinge zu beachten, hier:

  • AccountSyncSettings Implementierung kann jederzeit geändert werden.
  • Der obige Code wurde nicht ausgiebig getestet. Tatsächlich wurde es nur auf einem einzigen Zielgerät getestet (Galaxy S5 mit Lollipop).
  • "android.settings.ACCOUNT_SYNC_SETTINGS" Aktion möglicherweise nicht auf allen Geräten und Versionen von Android verfügbar. Schützen Sie sich vor möglichen Fehlern und suchen Sie nach alternativen Maßnahmen.
  • Anstatt getAccounts() möchten Sie möglicherweise getAccountsByType("com.myTLD.myApp") verwenden und einfach das erste Element aus dem zurückgegebenen Array verwenden, wenn der Zielbenutzer nicht mehr als ein Konto auf einem Gerät haben kann.
  • Wenn Sie account name kennen, können Sie diese Informationen nutzen, um die if -Klausel an Ihre Bedürfnisse anzupassen.

Hoffe das hilft.

Verwandte Themen