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.

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.

  • Cómo transferir datos extra de un fragmento a otro a través de la actividad
  • Cómo iniciar la actividad con FLAG_REORDER_TO_FRONT y FLAG_CLEAR_TOP
  • Cómo iniciar el servicio Android desde otra aplicación de Android
  • Android lanzar SMS intención sin ningún destinatario
  • ¿Se puede crear un filtro de intención basado en la consulta?
  • No puede entender el filtro intencional
  • Firefox para Android no inicia la aplicación cuando se hace clic en el enlace
  • Android Widget Click y Broadcast Receiver no funciona
  • Recursos de Android $ NotFoundException
  • Temporizador de cuenta atrás de Android hasta la fecha
  • Android - Cómo interceptar la intención de 'Instalar aplicación'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.