¿Cómo implementan las aplicaciones de Android el botón de compartir?

11

Me preguntaba cómo las aplicaciones de Android y Android implementan el botón de compartir y el mecanismo de compartir. Por ejemplo, cuando presiono el botón de compartir en YouTube, aparece una lista de aplicaciones para compartir. ¿Cómo se determina esta lista? ¿Existe una intención específica de "compartir", y luego aparecen todos los lugares capaces de compartir el tipo de intención proporcionada en la intención? ¿Cuál es el nombre técnico del patrón de diseño utilizado para implementar esto? Gracias.

Jack Maddington
fuente
1
¿Realmente quisiste decir "caca", o es un error tipográfico para "pops"? Al menos en inglés americano, lo primero es lo que los bebés le hacen a sus pañales.
JDługosz
Tienes razón. Recientemente cambié al teclado Swype en Android, que me permite escribir más rápido, pero ocasionalmente ingresa la palabra incorrecta y no me doy cuenta. Todavía no estoy seguro de qué hacer al respecto, no soy una persona muy cuidadosa. A veces en el sub y ni siquiera puedo ver la pantalla correctamente.
Jack Maddington
En el submarino (submarino?) Qué hacer: revisar antes de enviar. Y no contamine su lista de predicciones con palabras embarazosas.
JDługosz
Casualmente, mi lista de predicciones está llena de cosas de viejos correos electrónicos, que Swype lee automáticamente. ¡Ay!
Jack Maddington

Respuestas:

10

Hay dos partes en esto: el mecanismo para que las aplicaciones de comunicación digan que pueden compartir cosas, y el mecanismo para que las aplicaciones con contenido compartan. Me ocuparé de ellos uno a la vez, pero primero una nota rápida sobre los intentos .

Intenciones

La intención en Android es lo que se usa para iniciar una aplicación. Puede funcionar como un acceso directo o como una asociación de archivos de Windows. La intención puede especificar el nombre de la aplicación para iniciar, pero no tiene que hacerlo. También puede especificar la acción a realizar (por ejemplo, "abrir su actividad principal", "ver esta URL", "crear una entrada de calendario") y el tipo MIME del objeto sobre el que actuará (por ejemplo, lo que desea ver tiene tipo de imagen / jpeg). Algunos nombres de acciones son específicos de una aplicación en particular, pero muchos están estandarizados por Android para permitir que las aplicaciones interactúen.

Filtros de intención y aplicación de comunicación

Cada aplicación especifica filtros de intención para decir qué tipo de acciones puede realizar. por ejemplo, una aplicación de visor de imágenes registraría un filtro de intención para "ver esta URL" donde el tipo MIME es "imagen / *"; un navegador web registraría un filtro de intención para "ver esta URL" donde el esquema de URL es "http" o "https". Para poder compartir cosas, una aplicación registra un filtro de intención para la intención de "enviar", ya sea con un tipo específico (por ejemplo, si solo puede compartir fotos) o para cualquier tipo.

Aplicación de contenido

La aplicación que quiere compartir algo de contenido crea una intención con la acción "compartir" y una URL que apunta al contenido para compartir. (Esta es a menudo una URL "temporal" que le da a la aplicación receptora acceso temporal al archivo en el almacenamiento privado de la aplicación de contenido, o a una secuencia generada por la aplicación de contenido). No especifica el nombre de una aplicación para manejar el intención. A continuación, se da esa intención al marco Android y pide Android para mostrar el selector de diálogo. Android compara la intención con los filtros de intención de todas las aplicaciones instaladas, y crea la lista y se la muestra al usuario. Cuando el usuario elige una aplicación en particular, Android inicia esa aplicación y le pasa la intención. La aplicación usa la URL para obtener el contenido de la aplicación original.

Nuevo en Marshmallow: Direct Share

En Marshmallow, hay otro mecanismo llamado Direct Share . Esto complementa el mecanismo de intención para que pueda elegir personas o grupos para compartir directamente desde el diálogo de selección, omitiendo el paso adicional de "a quién le gustaría enviarlo". Esto funciona ligeramente diferente: la aplicación de comunicación tiene que proporcionar un servicio. Cuando la aplicación con el contenido solicita un selector, Android inicia el servicio para cada aplicación relevante. El servicio devuelve una lista de objetivos compartidos relevantes , y Android reúne todas esas listas separadas en la lista que se muestra en el diálogo.

Dan Hulme
fuente
Pero, he visto que las aplicaciones muestran bastantes diálogos de selección diferentes . ¿Todos los muestra realmente el sistema operativo o la aplicación en sí puede obtener una lista de objetivos?
user1686
@grawity El cuadro de diálogo incorporado tiene algunas opciones de personalización (por ejemplo, para establecer el título), pero también es posible que la aplicación solicite a Android la lista de objetivos compartidos y los coloque en su propio cuadro de diálogo. Mi selector de navegador, bURLy, es un ejemplo de esto, pero con la intención de "abrir URL" en lugar de la intención de "enviar".
Dan Hulme
11

No soy un desarrollador, por lo que solo puedo dar una explicación cruda: las aplicaciones declaran en Manifestqué Mimetypes entienden y están dispuestos a responder al compartir acciones. Para esto definen los llamados "filtros de intención", por ejemplo:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="message/*" />
    <data android:mimeType="multipart/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

Por lo tanto, cada vez que presiona el botón "compartir", el contenido para compartir se evalúa y se compara con las aplicaciones que han declarado su disposición a recibir el formato.

Fuentes:

Izzy
fuente
1
Eso es más o menos directamente. La aplicación (que comparte) es capaz de filtrar algunas de las respuestas de los encuestados, pero la mayoría no.
coteyr
2
@HiltonShumway es por eso que voté por su respuesta. Aparte de mí, Dan está en forma en el desarrollo y sabe mucho mejor cómo van las cosas juntas. Entonces, cuando publiqué mi respuesta, esperaba que él publicara una también: no decepcionó mi esperanza :)
Izzy