2011-12-29 16 views
5

que estoy usando:¿Agregar acción visible solo en aplicaciones específicas a ACTION_SEND?

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("image/jpeg"); 
(...) 

para compartir la imagen generada en mi aplicación. Me gustaría agregar acción personalizada (guardar la imagen a la galería) a la intención creado por

Intent.createChooser(i, "..."); 

Estaba pensando en la adición de la actividad con la intención-filtro para la acción android.intent.action.SEND, pero esto hará que mi actividad visible y disponible para todas las aplicaciones. Podría cambiar setType ("image/jpeg") a setType ("image/*") y añadir

<data android:mimeType="image/foobar"> 

a la intención del filtro, pero esto hará que mi actividad visible para todas las aplicaciones que pide para una imagen/* .

¿Hay alguna manera de filtrar la visibilidad de la acción por el nombre del paquete del llamante (u otra cosa, que podría distinguir mi aplicación de otra)?

+0

La mejor solución es hacer rodar su propio diálogo selector, poblado a través de su propio material manual y los resultados de llamar a 'queryIntentActivities() 'from' PackageManager'. – CommonsWare

Respuesta

2

Android tiene una buena solución para este requisito, el truco es Intent.EXTRA_INITIAL_INTENTS:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("image/jpeg"); 

List<Intent> myAddedIntents = new ArrayList<Intent>(); 
Intent myIntent = new Intent(...); 
myAddedIntents.add(myIntent); 

Intent chooserIntent = Intent.createChooser(intent, "Send via:"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
     myAddedIntents.toArray(new Parcelable[] {})); 

startActivity(chooserIntent); 
+0

Gracias! Probaré eso. –

Cuestiones relacionadas