Ya sea una imagen divertida, un video informativo o un clip de audio cautivador, permitir que los usuarios compartan contenido enriquece su experiencia y promueve la participación. En este documento, se exploran los aspectos esenciales para compartir contenido multimedia en Android, incluidas las APIs y las técnicas que necesitas para integrar esta función.
Diseñada para compartir
El diseño de Android promueve la interoperabilidad entre apps con un sistema basado en intents. Un intent es una descripción abstracta de una operación que se realizará. Los intents permiten que las apps se comuniquen entre sí sin tener que conocer detalles específicos entre sí.
Cuando una app quiere compartir datos o iniciar una acción, crea un intent especifica el tipo de contenido y la operación. El sistema Android presenta una lista de apps relevantes que pueden procesar ese intent, lo que permite al usuario elegir app para usar. Este enfoque fomenta un ecosistema colaborativo.
Para compartir texto, solo necesitas algunas líneas de código:
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to share.")
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
La línea createChooser muestra la IU de Android Sharesheet, que permite a los usuarios compartir información con otras personas, incluidas sugerencias relevantes de apps, con solo presionar la pantalla una vez. Otras cosas que puedes hacer con Android Sharesheet incluyen lo siguiente:
- Conocer cuándo los usuarios implementan el uso compartido y dónde
- Proporcionar vistas previas de contenido de texto enriquecido a partir de Android 10 (nivel de API 29)
Consulta Cómo enviar datos simples a otras apps para obtener más información sobre Android Sharesheet y cómo usarlos.
Proporcionar objetivos de Direct Share para que los usuarios de otras apps para compartir URLs, imágenes u otros tipos de datos con tu app. Directo Compartir presenta contactos directamente desde apps de mensajería y redes sociales. en Android Sharesheet sin que los usuarios tengan que seleccionar la app y, luego, busca el contacto.
Admite recibir contenido enriquecido a través de un OnReceiveContentListener. Esta API proporciona un único lugar para que tus
para recibir todo el contenido, desde texto sin formato y con estilo hasta lenguaje de marcado,
imágenes, videos, archivos de audio y otros. El contenido puede provenir de teclados de imágenes, arrastrar y soltar, o el portapapeles.
Comparte archivos multimedia
Los intents solo pueden contener una pequeña cantidad de datos, por lo que Android proporciona una forma para que los intents contengan un control seguro de los archivos. Compartir archivos multimedia de forma segura desde tu app implica lo siguiente:
- Configura tu app para que ofrezca un controlador seguro al archivo, en forma de un URI de contenido, con el componente
FileProviderde Android. - Especifica directorios para compartir en tu manifiesto.
- Usa
getUriForFilepara crear una URL de contenido que funcione como un para acceder al archivo. - Crear un intent que otorgue permisos al archivo
Para obtener más información sobre cómo compartir archivos de forma segura, consulta Información para compartir archivos archivos.
Optimiza el contenido multimedia para compartirlo
Ya sea que compartas contenido multimedia con otros usuarios en tu app o con otra app, debes asegurarte de compartir contenido multimedia que ofrezca una alta compartir la experiencia.
Lograr un equilibrio entre calidad y tamaño
Los archivos multimedia grandes pueden consumir rápidamente el ancho de banda y el almacenamiento, lo que genera retrasos frustrantes y posibles cargos por exceso de datos para los usuarios. La compresión es tu mejor aliada.
- Compresión de imágenes: Utiliza formatos de compresión de imágenes modernos, como WebP y AVIF, que ofrecen relaciones de compresión superiores en comparación con los JPEG tradicionales sin pérdida significativa de calidad. Experimenta con diferentes calidades configuración para encontrar el punto óptimo.
- Compresión de video: Aprovecha la potencia de la compresión de video AV1 o H.265 (HEVC) para brindar una mejor eficiencia de compresión y, al mismo tiempo, mantener una excelente calidad visual. Puedes comprobar si hay codificación de hardware
en dispositivos con Android 10 y versiones posteriores, así como la
mediaPerformanceClasspara ayudar para determinar cuál es la mejor opción para tu dispositivo. Considera ofrecer diferentes opciones de resolución para atender las preferencias del usuario y las preferencias condiciones.
fun hasHardwareEncodingSupportFor(mimeType: String): Boolean {
val codecList = MediaCodecList(REGULAR_CODECS)
val codecInfos = codecList.codecInfos
for ( codecInfo in codecInfos ) {
if (!codecInfo.isEncoder()) {
continue;
}
if (!codecInfo.isHardwareAccelerated()) {
continue;
}
val types: Array<String> = codecInfo.getSupportedTypes()
for (j in types.indices) {
if (types[j].equals(mimeType, ignoreCase = true)) {
return true
}
}
}
return false
}
// test for AV1 hardware encoding support
val hasAV1 = hasHardwareEncodingSupportFor("video/av01")
Adaptando contenido multimedia
Las plataformas de redes sociales a menudo aplican dimensiones y relaciones de aspecto específicas para y los medios compartidos. Si redimensionas y recortas de forma proactiva los archivos multimedia antes de compartirlos, puedes evitar distorsiones o problemas de formato inesperados cuando los usuarios publican contenido en sus plataformas favoritas.
Proporciona instrucciones y orientación claras sobre cómo los usuarios pueden optimizar su contenido multimedia antes de compartirlo. Aquí podrías incluir sugerencias para ajustar las tasas de bits de codificación, establecer parámetros de cuantización, elegir el formato de video seleccionar tamaños de archivo adecuados o comprender el impacto de los diferentes de uso compartido.
Mejora la visibilidad en los medios
Agregar metadatos relevantes, como títulos, descripciones y etiquetas a tus archivos multimedia, puede mejorar su visibilidad. Anima a los usuarios a agregar sus propias descripciones y leyendas cuando compartan contenido, lo que personalizará aún más la experiencia.
Agrega metadatos a las imágenes
La clase Jetpack ExifInterface escribe metadatos en imágenes JPEG, PNG y WebP en forma de etiquetas EXIF.
// sets the title of the image in the form of Exif data
val exif = ExifInterface(imageFile)
exif.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, "Beautiful sunset")
exif.saveAttributes()