关于媒体分享

无论是趣味图片、信息丰富的视频或引人入胜的音频片段, 让用户能够共享内容,丰富了他们的体验,并促进了 互动。本文档探讨了在 Android 设备上分享媒体内容的基础知识, 包括集成此功能所需的 API 和技术。

专为分享而设计

Android 的设计促进了应用之间的互操作性,这些应用使用基于 intent。intent 是对要执行的操作的抽象描述。借助 intent,应用可以相互通信,而无需知晓 相互了解具体细节。

当应用想要分享数据或发起操作时,它会创建一个 Intent,用于 指定内容的类型和操作。Android 系统会生成一个列表 可处理相应 Intent 的相关应用,让用户能够选择 应用。这种方法可打造一个协作式生态系统。

只需几行代码即可共享文本:

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)

createChooser 行显示了 Android Sharesheet 界面, 让用户能够与其他人分享信息(包括相关的应用推荐), 只需点按一下。您可以使用 Android Sharesheet 执行的其他操作包括:

如需详细了解 Android,请参阅向其他应用发送简单的数据 Sharesheet 及其使用方法。

提供直接共享目标,使 与您的应用分享网址、图片或其他类型的数据。直接 分享的工作原理是直接显示即时通讯应用和社交应用中的联系人 而无需用户先选择应用 搜索该联系人。

支持通过 OnReceiveContentListener。借助此 API 用于处理从纯文本和样式文本到标记的所有内容的接收, 图片、视频、音频文件等内容可能来自图片 拖放或剪贴板。

分享媒体文件

Intent 只能包含少量数据,因此 Android 提供了一种 用于包含文件安全句柄的 intent。通过以下服务安全地分享媒体文件: 您的应用涉及:

如需详细了解如何安全地共享文件,请参阅关于共享文件。 文件。

优化媒体内容以便分享

无论您是在应用中与其他用户分享媒体内容,还是将媒体内容分享到 则您要确保分享的视频质量 分享体验

在质量和大小之间找到平衡

大型媒体文件可能会快速占用带宽和存储空间, 令人沮丧的延迟和潜在的数据超额费用。 压缩就是最好的方法。

  • 图片压缩利用 WebP 和 AVIF 等新型图片压缩格式,这些格式与传统 JPEG 相比,压缩比更高,且画质损失不明显。尝试不同质量 找到最佳平衡点
  • 视频压缩利用 AV1 或 H.265 (HEVC) 的强大功能视频 以提供更好的压缩效率,同时保持 出色的视觉质量您可以检查是否存在硬件编码 (Android 10 及更高版本的设备)以及 mediaPerformanceClass,可帮助您 确定您的设备能提供最佳支持。考虑提供不同的分辨率选项,以满足不同的用户偏好和网络条件。
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")

调整媒体

社交媒体平台通常会对分享的媒体内容强制执行特定的尺寸和宽高比。通过在分享前主动调整媒体文件的大小和剪裁,您可以避免用户在发布到喜爱的平台时出现意外失真或格式问题。

提供明确的说明和指导,告知用户如何在分享前优化媒体内容。这可能包括有关调整编码比特率、设置量化参数选择视频格式、选择合适的文件大小或了解不同分享选项影响的提示。

提高媒体曝光度

为媒体添加相关元数据,例如标题、说明和标签 可以提高它们的可检测性。鼓励用户在分享时添加自己的说明和字幕,进一步打造个性化体验。

向映像添加元数据

Jetpack ExifInterface 类将元数据写入 JPEG、PNG 和 WebP 中 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()