EmojiCompat для устройств Huawei

#android #fonts #emoji #huawei-mobile-services #google-fonts

#Android #шрифты #смайлики #huawei-мобильные сервисы #google-шрифты

Вопрос:

Я хотел бы поддерживать смайлики для устройств Huawei в своем приложении. Для всех других поставщиков я использую подобный код для инициализации 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)
 

Но для устройств Huawei, поскольку у них нет доступа к ресурсам Google (мое предположение), это не работает, и EmojiCompat не инициализируется. Я знаю, что BundledEmojiCompatConfig это можно было бы использовать, но я бы предпочел всегда выбирать самый новый шрифт.

Есть ли какая-либо альтернатива providerAuthority / пакету Google для устройств Huawei?

Комментарии:

1. Я искал документацию HMS AppConnect и HMS Core для чего-либо Font , и FontRequest , похоже, у них нет никакой службы. Вам следует отказаться от комплектации.

2. Это к несчастью. Я предполагаю, что экосистема Huawei еще не создана. Спасибо за ваш ответ!

3. Какую конкретную ошибку вы получили? И на какой модели устройства? Я только что протестировал этот образец github.com/android/user-interface-samples/tree/main/EmojiCompat на Huawei Mate 30 Pro (без сервисов Google), и он работает

Ответ №1:

EmojiCompat является частью Android и не является эксклюзивным для мобильных сервисов Google. Я протестировал приведенное ниже демонстрационное приложение с тем же фрагментом кода, что и у вас, и оно отлично работает на моем Huawei Mate 30 Pro.

Ссылка на Github.

Комментарии:

1. А как насчет части «Вам нужна бета-версия сервисов Google Play, чтобы использовать эту функцию»? Не все устройства Huawei, особенно новые, поставляются с какими-либо пакетами, связанными с Google

2. Можете ли вы предоставить более подробную информацию по этому вопросу? Я не получал это сообщение, когда я тестировал EmojiCompat. Он вообще не должен выдавать никаких ошибок, связанных с Google, поскольку это компонент Android.

Ответ №2:

Вы можете использовать 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 )