2012-10-08 77 views
8

Al hacer startActivity() con selector, Android listará todas las aplicaciones habilitadas para manejar su Intent junto con opciones para establecer esta asignación permanente o una vez (en ICS es "Siempre "y" Solo una vez "botón de acción, en 2.x es la casilla de verificación). Sin embargo, para este código:No se puede hacer startActivity() con Selector preguntando solo una vez por aplicación

public class Redirector { 
    public static void showActivityWithChooser(Context context, int chooserLabelTitleId, Intent intent) { 
     try { 
     context.startActivity(Intent.createChooser(intent, 
        context.getResources().getString(chooserLabelTitleId))); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 

    public static void viewInExternalApplication(Context context, String url) { 
     Intent intent = new Intent( Intent.ACTION_VIEW); 
     intent.setData(Uri.parse(url)); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
     showActivityWithChooser(context, R.string.open_chooser_title, intent); 
    } 
} 

no veo | botones de "Siempre" Sólo una vez y no puedo hacer mi selección permanente (Tengo aplicaciones enumeradas única y puede disparar cualquier tocándolo). ¿Qué elementos básicos pasé por alto que hicieron que Android no pudiera hacer persistente la elección del usuario?

Ver las fotografías: a la izquierda de diálogo es lo que me gustaría ver, pero es justo lo que me pasa ahora (diferente número de aplicaciones tanto en los diálogos es irrelevante):

enter image description here

+0

'Siempre' significa que la selección es permanente. Tu aplicación no tiene forma de controlar este diálogo, es parte de Android directamente. – mah

+0

@mah: Te perdiste el punto. –

+1

De hecho lo hice. Sin embargo, la segunda mitad de mi comentario permanece; este no es un diálogo que puedes controlar desde tu aplicación. El problema es que está llamando a showActivityWithChooser, que no está destinado a permitir que el usuario cambie su valor predeterminado, sino que está destinado a obligar al usuario a elegir. – mah

Respuesta

16

Para un registro - Fue un tipo de error de interpretación excesiva (mío). El selector que estaba usando es exactamente lo que se puede ver en la imagen del lado derecho. Y estaba apareciendo todo el tiempo porque ... lo llamaba todo el tiempo. Supuse incorrectamente que el selector ofrece la funcionalidad "Siempre | Solo una vez" y no se mostraría si el usuario toca "Siempre" (y se mostrará si usó "Solo una vez"). Pero está mal. El selector siempre aparece porque esa es su función: permitirle al usuario elegir. La funcionalidad "Siempre | Solo una vez" es diferente: es una característica del marco Android para llamadas startActivity() y startActivityForResult(), y se mostrará automáticamente cuando sea necesario, si hay más de una aplicación (o más de intent-filter) que puede manejar cierta intención. No se mostrará si tiene solo uno (o el usuario al que se haya llamado "Siempre"). Usted, como desarrollador, no necesita preocuparse.

Así que para solucionar este problema, acabo de cambiar mi código viewInExternalApplication() para que sea simplemente llame startActivity():

try { 
    context.startActivity(intent); 
} catch (....) 

y dejar que el marco haga el resto.

+1

¡Exactamente lo que quería entender! 10x – WindRider

Cuestiones relacionadas