Información acerca del uso compartido de contenido multimedia

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 y compromiso de los usuarios. En este documento, se exploran los aspectos esenciales de compartir contenido multimedia en Android, incluidas las APIs y las técnicas necesarias para integrar esta capacidad.

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 saber 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)

En la línea createChooser, se muestra la IU de Android Sharesheet, que les permite a los usuarios compartir información con otras personas, incluidas sugerencias de aplicaciones relevantes, con solo presionar una vez. Otras cosas que puedes hacer con Android Sharesheet incluyen lo siguiente:

Para obtener más información sobre Android, consulta Cómo enviar datos simples a otras apps. Comparte hojas y aprende a usarlas.

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.

Promueve la recepción de contenido enriquecido a través de una 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 fuentes teclados, 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 incluye lo siguiente:

Consulta Acerca del uso compartido de archivos para obtener más información sobre cómo compartir archivos de forma segura.

Optimiza el contenido multimedia para el uso compartido

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.

Buscamos el equilibrio entre calidad y tamaño

Los archivos multimedia grandes pueden consumir ancho de banda y almacenamiento rápidamente, frustrantes demoras y posibles cargos por excedente de datos para tus 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 proporciones de compresión superiores a las de los formatos JPEG sin una pérdida de calidad significativa. Experimenta con diferentes parámetros de calidad para encontrar el punto óptimo.
  • Compresión de videos: Aprovecha la potencia de los videos AV1 o H.265 (HEVC). compresión para proporcionar una mejor eficiencia de compresión y, al mismo tiempo, mantener excelente calidad visual. Puedes comprobar si hay codificación de hardware en dispositivos con Android 10 y versiones posteriores, así como la mediaPerformanceClass para 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 suelen aplicar dimensiones y relaciones de aspecto específicas para el contenido multimedia compartido. Recortando y redimensionando archivos multimedia de forma proactiva antes de compartido, puede evitar problemas inesperados de distorsión o formato los usuarios publican en sus plataformas favoritas.

Proporciona instrucciones y orientación claras sobre cómo los usuarios pueden optimizar su contenido multimedia antes de compartirlo. Esto podría incluir sugerencias para ajustar las tasas de bits de codificación, establecer parámetros de cuantificación, elegir el formato de video, seleccionar los tamaños de archivo adecuados o comprender el impacto de las diferentes opciones 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. Animar a los usuarios a agregar descripciones y subtítulos cuando los compartas, lo que personaliza 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()