#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.
Комментарии:
1. А как насчет части «Вам нужна бета-версия сервисов Google Play, чтобы использовать эту функцию»? Не все устройства Huawei, особенно новые, поставляются с какими-либо пакетами, связанными с Google
2. Можете ли вы предоставить более подробную информацию по этому вопросу? Я не получал это сообщение, когда я тестировал EmojiCompat. Он вообще не должен выдавать никаких ошибок, связанных с Google, поскольку это компонент Android.
Ответ №2:
Вы можете использовать BundledEmojiCompatConfig
для устройств, к которым нет доступа GMS
.
Например:
- Добавить зависимость:
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)
}
}
- Инициализируйте
EmojiCompat
как можно раньше (из того, что я наблюдал, может быть довольно медленным),
либо черезApplication#onCreate()
илиApp Startup
(https://developer.android.com/topic/libraries/app-startup )