Solicitar actividad predeterminada sin abrir realmente la actividad
Necesito establecer la aplicación predeterminada para un tipo mime específico. Sé cómo borrar el defecto pero necesito entonces pedir al usuario sin abrir realmente la aplicación.
PackageManager p = mContext.getPackageManager(); ComponentName cN = new ComponentName(mContext, FakeDownloadActivity.class); p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Intent selector = new Intent(Intent.ACTION_DEFAULT); selector.addCategory(Intent.CATEGORY_DEFAULT); selector.setType(mimeType); mContext.startActivity(selector); p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
El código anterior inicia la actividad en lugar de seleccionar SOLAMENTE la actividad predeterminada. Funciona activando una actividad falsa y luego desactivándola. Esto hace que el cuadro de diálogo Seleccionar aplicación predeterminada muestre la próxima vez que se llama. Simplemente quiero seleccionar SOLAMENTE la actividad predeterminada.
- resultcode y datos null in onActivityresult
- Iniciar aplicación desde el navegador url esquema
- Forzar una cámara para abrir siempre en modo retrato en android
- ¿Cuál es la intención de abrir la configuración de DND?
- Compartir intención con la opción Bluetooth solamente
- Android.content.ActivityNotFoundException: Ninguna actividad encontrada para manejar Intent splash screen
- ¿Cómo puedo pasar URI con intención explícita?
- La vista previa de la cámara no está reiniciando?
- Rjava.lang.IllegalArgumentException en startActivity (intención, animación de paquete)
- Manejo de esquemas de URI desconocidos en Android (ejemplo de Bitcoin)
- ¿Android comprueba si la aplicación alcanzó fondo cuando el usuario presionó el botón casero?
- Dos lanzadores para una sola actividad
- intento de lanzamiento de eclipse androide para mapa con una dirección en lugar de latitud y longitud
Lo que está buscando es una intención ACTION_PICK_ACTIVITY
.
En primer lugar, se crea una intención que define las aplicaciones que deben ser elegibles para elegir, por ejemplo:
Intent mainIntent = new Intent(Intent.ACTION_DEFAULT, null); mainIntent.addCategory(Intent.CATEGORY_DEFAULT);
A continuación, crea la intención ACTION_PICK_ACTIVITY
y, como extra, pasa la intención principal que creó antes
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);
Ahora, usted apenas comienza una actividad para el resultado con esta intención:
startActivityForResult(pickIntent, 0);
Y se creará un cuadro de diálogo en el que el utilizado puede seleccionar una aplicación, pero al hacer clic en ella, la actividad no se inicia, sino que permanecerá en su actividad y la función onActivityResult
será llamada con los resultados. Así que necesitas crear esa función:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //In data, you have all the information about the selected application if (data != null) { //You can launch the application that we just picked with startActivity(data); //or explore the variable to get all the information than you want } }
Echa un vistazo a la clase Intent
. Allí usted tiene información sobre el nombre del paquete, y la clase que sería lanzada.
A partir de ahora, lo que necesita es configurar ese paquete y clase como predeterminados para la intención, o cualquier otra cosa que necesite. El lado malo, es que sólo se puede guardar esa información para sus propios fines internos, por ejemplo para decidir qué aplicación lanzar la próxima vez que los usuarios realiza alguna acción. Lo que no puede hacer es modificar la configuración del sistema para establecer una actividad predeterminada para una intención determinada. En realidad, el gestor de paquetes tiene el método addPreferredActivity , que se suponía que debía hacer esto, pero está obsoleto desde el nivel 8 de la API, dándole las siguientes razones:
Se trata de una API protegida que no debería haber estado disponible para aplicaciones de terceros. Es responsabilidad de la plataforma asignar actividades preferidas y esto no se puede modificar directamente. Agregue una nueva asignación de actividad preferida al sistema. Esto se usará para seleccionar automáticamente el componente de actividad dado cuando Context.startActivity () encuentra múltiples actividades coincidentes y también coincide con el filtro dado.
- Comprueba el estado de la suscripción en la aplicación en Android
- Reaccionar nativo: seleccionable vista de lista de sección da error