【问题标题】:EmojiCompat for Huawei devices华为设备的 EmojiCompat
【发布时间】:2021-04-19 07:42:55
【问题描述】:

我想在我的应用中支持华为设备的表情符号。对于所有其他供应商,我使用这样的代码来初始化 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 是否有替代方案?

【问题讨论】:

  • 我在 FontFontRequest 上搜索 HMS AppConnect 和 HMS Core 文档,似乎他们没有任何服务。你应该使用捆绑。
  • 那是不幸的。我猜华为的生态系统还没有。感谢您的回答!
  • 您遇到了什么具体错误?在哪个设备型号上?我刚刚在华为 Mate 30 Pro(没有 Google 服务)上测试了这个样本 github.com/android/user-interface-samples/tree/main/EmojiCompat,它正在工作

标签: android fonts emoji huawei-mobile-services google-fonts


【解决方案1】:

您可以将BundledEmojiCompatConfig 用于无法访问GMS 的设备。

例如:

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

implementation 'androidx.emoji2:emoji2-views:$emojiCompatVersion'
implementation 'androidx.emoji2:emoji2-bundled:$emojiCompatVersion'
  1. 帮助类初始化 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)

【讨论】:

    【解决方案2】:

    EmojiCompat 是 Android 的一部分,并非谷歌移动服务独有。我测试了下面的演示应用程序,它的代码和你的 sn-p 相同,它在我的华为 Mate 30 Pro 上运行良好。

    Github link.

    【讨论】:

    • 那么“您需要 Google Play 服务的测试版才能使用此功能”部分呢?并非所有华为设备,尤其是新设备,都附带任何与 Google 相关的软件包
    • 您能否提供有关此问题的更多信息?我在测试 EmojiCompat 时没有收到此消息。它根本不应该给出任何与 Google 相关的错误,因为它是一个 Android 组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多