无论是趣味图片、信息丰富的视频或引人入胜的音频片段, 让用户能够共享内容,丰富了他们的体验,并促进了 互动。本文档探讨了在 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 及其使用方式,请参阅将简单的数据发送到其他应用。
提供“直接分享”目标,让其他应用的用户能够更轻松、更快捷地与您的应用分享网址、图片或其他类型的数据。直接分享功能的运作方式是,直接在 Android Sharesheet 中显示即时通讯应用和社交应用中的联系人,用户无需选择应用,然后再搜索联系人。
支持通过 OnReceiveContentListener 接收富媒体内容。此 API 提供了一个位置,供您的代码处理接收所有内容(从纯文本和样式文本到标记、图片、视频、音频文件等)。内容可能来自图片
拖放或剪贴板。
分享媒体文件
intent 只能包含少量数据,因此 Android 提供了一种方法,让 intent 可以包含对文件的安全句柄。从应用安全地共享媒体文件需要满足以下条件:
- 配置您的应用以提供文件的安全句柄 - 形式为
内容 URI - 使用 Android
FileProvider组件。 - 在清单中指定可共享目录。
- 使用
getUriForFile创建用作安全网址的内容网址 文件句柄。 - 创建一个 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 类会以 Exif 标记的形式将元数据写入 JPEG、PNG 和 WebP 图片中。
// 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()