华为设备的 EmojiCompat

5
我希望在我的应用程序中支持华为设备的表情符号。对于所有其他供应商,我使用以下代码来初始化 EmojiCompat:
 val fontRequest = FontRequest(
            "com.google.android.gms.fonts",
            "com.google.android.gms",
            "Noto Color Emoji Compat",
            R.array.com_google_android_gms_fonts_certs
        )
        val config = FontRequestEmojiCompatConfig(context, fontRequest)
        EmojiCompat.init(config)

对于华为设备而言,由于它们没有访问谷歌资源(我猜测),因此无法正常工作,EmojiCompat也无法初始化。我知道可以使用BundledEmojiCompatConfig,但我更喜欢始终获取最新的字体。

在华为设备上,是否有Google提供的providerAuthority/Package的替代方案?


1
我正在搜索HMS AppConnect和HMS Core文档中关于“Font”和“FontRequest”的任何内容,似乎它们没有提供任何服务。你应该使用捆绑方式。 - Nikola Despotoski
真不走运,我猜华为的生态系统还没有达到那个水平。感谢您的回答! - Jan Stoltman
你遇到了什么具体的错误?在哪个设备型号上?我刚在华为Mate 30 Pro(没有谷歌服务)上测试了这个示例https://github.com/android/user-interface-samples/tree/main/EmojiCompat ,它可以正常工作。 - GioLaq
2个回答

2

对于无法访问 GMS 的设备,您可以使用 BundledEmojiCompatConfig

例如:

  1. 添加依赖项:
def emojiCompatVersion = "1.0.0-rc01"

implementation 'androidx.emoji2:emoji2-views:$emojiCompatVersion'
implementation 'androidx.emoji2:emoji2-bundled:$emojiCompatVersion'
  • 初始化 EmojiCompat 的辅助类
  • import android.content.Context
    import androidx.emoji2.bundled.BundledEmojiCompatConfig
    import androidx.emoji2.text.EmojiCompat
    import androidx.emoji2.text.EmojiCompat.LOAD_STRATEGY_MANUAL
    
    object EmojiCompatHandler {
    
        fun initializeEmojiCompat(appContext: Context) {
            val config = BundledEmojiCompatConfig(appContext)
                .setReplaceAll(true)
                .setMetadataLoadStrategy(LOAD_STRATEGY_MANUAL)
                .registerInitCallback(object : EmojiCompat.InitCallback() {
                    override fun onInitialized() {
                        logDebug("EmojiCompat Initialized Successfully")
                    }
    
                    override fun onFailed(throwable: Throwable?) {
                        logDebug("EmojiCompat Failed to Load: ${throwable?.message}")
                    }
                })
    
            EmojiCompat.init(config)
        }
    }
    
    
    1. 尽早初始化EmojiCompat(根据我的观察可能会相当缓慢),
      可以通过Application#onCreate()App Startup来实现
      (https://developer.android.com/topic/libraries/app-startup)

    0

    EmojiCompat 是 Android 的一部分,不仅限于 Google 移动服务。我测试了下面的演示应用程序,它具有与您相同的代码片段,在我的华为 Mate 30 Pro 上运行良好。

    Github 链接。


    那么,“您需要使用此功能的 Google Play 服务测试版”部分怎么办?并非所有华为设备,尤其是新设备,都带有任何与 Google 相关的软件包。 - Jan Stoltman
    你能提供更多关于这个问题的信息吗?当我测试EmojiCompat时,我没有收到这条消息。它不应该给出任何与Google相关的错误,因为它是一个Android组件。 - Zinna

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接