You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Android Kotlin键盘向WhatsApp发送动图贴纸变静态问题咨询

自定义Android键盘向WhatsApp发送动图贴纸问题解答

问题背景

我用Kotlin开发了一款自定义Android键盘应用(KBoard),支持直接向WhatsApp聊天发送贴纸。静态贴纸能正常使用,但动图贴纸发送后始终显示为静态图片。

已尝试操作

  • 将贴纸导出为动图WebP格式(512×512像素,透明,大小超过500KB)
  • 使用FileProvider生成content:// URI
  • 通过InputConnectionCompat.commitContent提交内容,MIME类型设为"image/webp.wasticker"
  • 验证WhatsApp接受该MIME类型且commitContent调用成功
  • 清除WhatsApp缓存排除旧静态缓存版本

核心代码片段

fun sendAnimatedStickerToWhatsApp(uri: Uri, mimeType: String = "image/webp.wasticker") {
    val editorInfo = currentInputEditorInfo ?: return
    val inputConnection = currentInputConnection ?: return

    if (EditorInfoCompat.getContentMimeTypes(editorInfo).contains(mimeType)) {
        val clipDescription = ClipDescription("WhatsApp Sticker", arrayOf(mimeType))
        val inputContentInfo = InputContentInfoCompat(uri, clipDescription, null)

        InputConnectionCompat.commitContent(
            inputConnection,
            editorInfo,
            inputContentInfo,
            InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION,
            null
        )
    }
}

核心问题:提交操作成功,但WhatsApp仍将动图WebP转为静态贴纸。


问题解答

1. WhatsApp是否要求动图贴纸必须通过Cloud API Media API + Messages API(带media_id)发送才能保持动画效果,而非通过键盘的commitContent?

不需要。第三方键盘完全可以通过commitContent发送动图贴纸并保留动画效果,Cloud API是针对商业/开发者平台的批量消息发送场景,和普通聊天的键盘输入场景无关。

2. 若commitContent支持动图贴纸,需使用何种准确的MIME类型或元数据以避免静态化?

不要用image/webp.wasticker,这个MIME类型是针对WhatsApp官方贴纸包的静态贴纸设计的。正确的动图贴纸MIME类型应该是image/webp,并且需要确保WebP文件本身是动画格式(而非静态WebP)。另外,提交时可以在ClipDescription中添加额外的元数据标记,帮助WhatsApp识别动图属性。

调整后的代码示例:

fun sendAnimatedStickerToWhatsApp(uri: Uri) {
    val editorInfo = currentInputEditorInfo ?: return
    val inputConnection = currentInputConnection ?: return
    val mimeType = "image/webp"

    if (EditorInfoCompat.getContentMimeTypes(editorInfo).contains(mimeType)) {
        val clipDescription = ClipDescription("WhatsApp Animated Sticker", arrayOf(mimeType)).apply {
            putExtra("android.content.extra.STICKER_ANIMATED", true)
        }
        val inputContentInfo = InputContentInfoCompat(uri, clipDescription, null)

        InputConnectionCompat.commitContent(
            inputConnection,
            editorInfo,
            inputContentInfo,
            InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION,
            null
        )
    }
}

3. 是否存在额外要求(如循环标记、WebP的ANIM/ALPH块、contents.json中的元数据)才能让WhatsApp识别为动图贴纸?

有几个关键要求:

  • WebP文件结构:必须包含ANIM和ANMF块(动画WebP的核心结构),不能是静态WebP改后缀。可以用webpinfo工具验证文件是否为动画格式。
  • 循环设置:动画WebP需要设置循环次数(通常设为0表示无限循环),这是WhatsApp识别动图的必要条件之一。
  • 尺寸与大小:保持512×512像素,文件大小建议在500KB到1MB之间(过大可能被压缩),透明通道需保留。
  • 不需要contents.json:这个文件是官方贴纸包的配置文件,通过键盘发送单张贴纸时不需要提供。

4. 第三方键盘应用能否在普通WhatsApp聊天中发送可内嵌播放的动图贴纸,还是仅支持通过商业云API实现?

第三方键盘完全可以在普通WhatsApp聊天中发送可内嵌播放的动图贴纸,不需要依赖商业云API。只要满足上述WebP格式要求、正确的MIME类型和提交方式,就能实现动画效果。


内容的提问来源于stack exchange,提问作者Ashwin Soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 02:04:53