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.
share-menu
intents
Jack Maddington
fuente
fuente
Respuestas:
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.
fuente
No soy un desarrollador, por lo que solo puedo dar una explicación cruda: las aplicaciones declaran en
Manifest
qué Mimetypes entienden y están dispuestos a responder al compartir acciones. Para esto definen los llamados "filtros de intención", por ejemplo: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:
fuente