Ist es möglich, den „Anwendung Info“ Bildschirm zu starten (das heißt, Menu
→ Settings
→ Applications
→ Manage Applications
→ jede Anwendung wählen) aus einer anderen Anwendung?Wie kann ich den Anwendungsbildschirm für Android-Anwendungen programmgesteuert starten?
Antwort
In Android 2.3 können Sie startActivity()
auf einem ACTION_APPLICATION_DETAILS_SETTINGS
Intent
, mit einem richtigen Uri
, nutzen Sie Ihre App "verwalten" Bildschirm aufzurufen. Dies ist jedoch neu bei Android 2.3 - mir ist nicht bekannt, wie man das in früheren Android-Versionen tun kann.
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_SETTINGS));
bringt Sie zu den Einstellungen/Anwendungsliste. Wenn Sie eine bestimmte Anwendung geöffnet werden soll, denke ich in 2.2 und unten gibt es keine Möglichkeit, so dass Sie eine (nicht unbedingt vorgeschlagen, weil inoffizielle) Weg zu gehen, bräuchten:
final Intent i = new Intent("android.intent.action.VIEW");
i.setComponent(new ComponentName("com.android.settings","com.android.settings.InstalledAppDetails"));
i.putExtra(...); // need to figure out the correct extra, probably app package name
startActivity(i);
Aber beachten Sie, dass dies nicht empfohlen, da es kein offizieller API/Intent (Filter) ist und sich daher in der Zukunft ändern könnte.
In 2.2 und darunter gibt es keine öffentlichen APIs, auf die Sie zugreifen können. Aber Sie können die InstalledAppDetails Aktivität immer noch starten, wie die ManageApplications tut. siehe here
// utility method used to start sub activity
private void startApplicationDetailsActivity() {
// Create intent to start new activity
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(this, InstalledAppDetails.class);
intent.putExtra(APP_PKG_NAME, mCurrentPkgName);
// start new activity to display extended information
startActivityForResult(intent, INSTALLED_APP_DETAILS);
}
Fazit: Sie können die "Anwendung Info" Bildschirm wie folgt beginnen schrieb ich:
private static final String SCHEME = "package";
private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";
private static final String APP_PKG_NAME_22 = "pkg";
private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";
private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";
public static void showInstalledAppDetails(Context context, String packageName) {
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9) { // above 2.3
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(SCHEME, packageName, null);
intent.setData(uri);
} else { // below 2.3
final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
: APP_PKG_NAME_21);
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName(APP_DETAILS_PACKAGE_NAME,
APP_DETAILS_CLASS_NAME);
intent.putExtra(appPkgName, packageName);
}
context.startActivity(intent);
}
vielen dank! Das hat mir viel Zeit gespart. Soll der Kommentar "über 2.3" in "2.3 und höher" geändert werden? – kristianlm
das funktioniert perfekt für jede installierte Anwendung. Wenn ich jedoch versuche, die Einstellungen einer Systemanwendung zu öffnen, wird ein leerer Bildschirm angezeigt. –
Wir müssen auch intent.setFlags hinzufügen (Intent.FLAG_ACTIVITY_NEW_TASK); in beiden Aussagen. if() {... hier ...} else {... hier ...} –
Von API Ebene 9 (Android 2.3) können Sie eine Intent beginnen mit android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Also:
packageName = "your.package.name.here"
try {
//Open the specific App Info page:
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
} catch (ActivityNotFoundException e) {
//e.printStackTrace();
//Open the generic Apps page:
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
startActivity(intent);
}
Alte Frage, verbesserte Antwort:
/**
* <p>Intent to show an applications details page in (Settings) com.android.settings</p>
*
* @param context The context associated to the application
* @param packageName The package name of the application
* @return the intent to open the application info screen.
*/
public static Intent newAppDetailsIntent(Context context, String packageName) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("package:" + packageName));
return intent;
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
intent.putExtra("pkg", packageName);
return intent;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
intent.putExtra("com.android.settings.ApplicationPkgName", packageName);
return intent;
}
I verwendet Paolo Lösung, um die Anwendung Details Einstellungen in SDK 23+ zu öffnen, wenn der Benutzer die Berechtigungsanfrage in der Vergangenheit abgelehnt und Wählen Sie im Berechtigungsanfrage-Systemdialog die Option "Nicht erneut fragen". In diesem Fall habe ich die getPackageName()
Methode direkt verwendet.
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
- 1. Wie kann ich den Titel für eine UINavigationsleiste programmgesteuert festlegen?
- 2. Wie starten Sie den ausgewählten Daydream des Benutzers programmgesteuert?
- 3. Scala REPL programmgesteuert starten?
- 4. Starten H2-Datenbank programmgesteuert
- 5. Wie starten Sie Google Compute-Instanzen programmgesteuert?
- 6. Programm programmgesteuert neu starten
- 7. Wie kann ich den Installationspfad einer anderen Anwendung programmgesteuert abrufen?
- 8. Wie programmiere ich den Standardtelefonklingelton programmgesteuert?
- 9. Wie kann ich den vordefinierten Drools-Flow-Prozess programmgesteuert ändern?
- 10. Wie kann ich den Internet Explorer-Suchassistenten programmgesteuert ändern?
- 11. Wie kann ich den Hintergrund eines Bildes programmgesteuert erkennen?
- 12. Wie kann ich programmgesteuert den vollständigen Pfad der ausführenden Hauptklasse
- 13. Anwendungsbildschirm nach IOS verzerrt Upgrade
- 14. Wie kann ich den JFileChooser in der Detailansicht starten?
- 15. Wie kann ich den iOS Simulator vom Terminal aus starten?
- 16. Wie kann ich den Docker-Service mit Puppet ... neu starten?
- 17. Wie kann man den Dienst remote starten?
- 18. Dropwizard: Wie Sie den Dienst programmgesteuert stoppen
- 19. Wie kann ich JDT-Compiler programmgesteuert verwenden?
- 20. Wie kann ich E-Mail-Threads für Outlook programmgesteuert generieren?
- 21. Wie kann ich einen geplanten Task auf einem Remotecomputer programmgesteuert stoppen/starten?
- 22. Wie kann ich eine Datenbanktabelle programmgesteuert aktualisieren?
- 23. Wie kann ich TortoiseSVN sicher neu starten?
- 24. Go: Wie kann ich den Browser NACH dem Starten des Servers starten?
- 25. Yii2: So starten Sie einen Export programmgesteuert
- 26. Wie kann ich explorer.exe über C++ starten?
- 27. Wie kann ich Java3D schneller starten?
- 28. Wie kann ich Capistrano von bash starten?
- 29. Wie kann ich Richtlinien-URL programmgesteuert festlegen?
- 30. Wie kann ich programmgesteuert mit Paypal bezahlen?
Ich werde letzteres nicht empfehlen. Was passiert, wenn eine schädliche App das Paket com.android.settings verwendet? –
@PaoloRovelli Ich schrieb "nicht unbedingt empfohlen", aber aus einem anderen Grund. Ich glaube nicht, dass Sie die Gefahr vermeiden können, die Sie erwähnen; Wenn zwei Apps dieselbe Absicht (Zeichenfolge) verwenden, erhält der Benutzer immer einen Dialog zur Auswahl der zu verwendenden App (wodurch das Risiko ein wenig sinkt). Beachten Sie aber, dass der Parameter im ersten Ansatz auch nichts anderes als eine Zeichenkette ist: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_SETTINGS - also auch kein Schutz vor einer schädlichen App wenn es den Paketnamen com.android.settings verwendet. –