¿Es posible iniciar la pantalla "Información de aplicación" (es decir, Menu
→ Settings
→ Applications
→ Manage Applications
→ seleccionar cualquier aplicación) desde otra aplicación?¿Cómo puedo iniciar la pantalla de información de la aplicación Android programáticamente?
Respuesta
En Android 2.3, puede utilizar startActivity()
en una ACTION_APPLICATION_DETAILS_SETTINGS
Intent
, con una adecuada Uri
, para que aparezca la pantalla "gestionar" de su aplicación. Sin embargo, esto es nuevo en Android 2.3. No conozco una manera de hacerlo en versiones anteriores de Android.
startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_SETTINGS));
lo llevará a la configuración/lista de aplicaciones. Si desea abrir una aplicación específica, creo que en 2.2 y por debajo no hay manera, por lo que había necesidad de ir a una (no necesariamente sugerido, porque no oficial) forma:
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);
Pero tenga en cuenta que esto es no recomendado porque no es una API/intento oficial (filtro) y, por lo tanto, podría cambiar en el futuro.
En 2.2 y siguientes, no hay API públicas a las que pueda acceder. Pero aún puede iniciar la actividad de InstalledAppDetails del mismo modo que la ManageApplications. ver 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);
}
Conclusión: se puede iniciar la pantalla "Información de aplicación" como esto que he escrito:
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);
}
muchas gracias! esto me ahorró mucho tiempo. ¿Debería cambiarse el comentario "arriba 2.3" a "2.3 y arriba"? – kristianlm
esto funciona perfectamente para cualquier aplicación instalada. Sin embargo, si intento abrir la configuración de cualquier aplicación del sistema, aparece una pantalla en blanco. –
También necesitamos agregar intent.setFlags (Intención.FLAG_ACTIVITY_NEW_TASK); en ambas declaraciones. es decir, si() {... aquí ...} else {... aquí ...} –
De API de nivel 9 (Android 2.3) se puede iniciar una intención con android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Por lo tanto:
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);
}
vieja pregunta, la mejora de la respuesta:
/**
* <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;
}
que utiliza solución de Paolo con el fin de abrir la aplicación Detalles Ajustes en SDK 23+ cuando el usuario rechazó la solicitud de autorización en el pasado y elija la opción "No preguntar de nuevo" en el diálogo del sistema de solicitud de permiso.
Pero en este caso utilicé el método getPackageName()
directamente.
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
- 1. ¿Cómo bloquear programáticamente la pantalla en Android?
- 2. Android tome la captura de pantalla programáticamente
- 3. ¿Cómo tomar la captura de pantalla programáticamente?
- 4. cómo puedo configurar el icono de la aplicación programáticamente android
- 5. Activar programáticamente la pantalla en android
- 6. bloqueo/desbloqueo de la pantalla de Android programáticamente
- 7. Android para iniciar la aplicación
- 8. Iniciar la aplicación de Android sin actividad
- 9. Cómo iniciar/iniciar la aplicación en el arranque Android
- 10. Muestra programáticamente información sobre herramientas en la aplicación winforms
- 11. ¿cómo puedo iniciar el protector de pantalla (y bloquear la pantalla) desde la terminal os x?
- 12. ¿Cómo cambiar el tiempo de espera de la pantalla programáticamente?
- 13. pantalla de información personalizada en la pantalla de bloqueo en Android
- 14. cambiando el brillo de la pantalla programáticamente en android
- 15. ¿Cómo la aplicación de iPhone de Square recupera programáticamente la información de contacto del usuario?
- 16. Cómo iniciar la actividad desde el widget de la pantalla de inicio de android
- 17. cómo grabar video de la pantalla de mi aplicación mediante programación en android
- 18. Android: cambiar programáticamente la etiqueta de la aplicación?
- 19. ¿Cómo puedo obtener la ubicación actual en Android programáticamente?
- 20. Iniciar la aplicación de Android desde el código
- 21. Cómo iniciar automáticamente una aplicación de Android?
- 22. Android: iniciar nueva actividad desde la clase de aplicación
- 23. ¿Cómo ir a la pantalla de inicio predeterminada de Android programáticamente?
- 24. Acerca de iniciar la aplicación Android desde una URL
- 25. ¿Cómo finalizar la aplicación android NDK (actividad nativa) programáticamente?
- 26. Cómo iniciar la pantalla de inicio de forma programada en Android
- 27. Cómo iniciar la aplicación Android Calendar usando Intent (Froyo)
- 28. ¿Cómo puedo llamar a la pantalla de configuración de Wi-Fi desde mi aplicación usando Android
- 29. ¿Cómo obtener la pantalla DPI (linux, mac) programáticamente?
- 30. Pantalla de carga de la aplicación para Android
No recomendaré este último. ¿Qué sucede si una aplicación maliciosa usa el paquete: com.android.settings? –
@PaoloRovelli Escribí "no necesariamente recomendado", pero por una razón diferente. No creo que puedas evitar el peligro que mencionas; si dos aplicaciones usan el mismo intento (cadena), el usuario siempre obtendrá un diálogo para elegir la aplicación que usará (lo que reduce el riesgo un poco). Pero también, tenga en cuenta que el parámetro en el primer enfoque no es otra cosa que una cadena: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_SETTINGS - por lo que no hay protección contra una aplicación maliciosa si usa el nombre del paquete com.android.settings. –