Я пишу небольшое приложение для Android, в котором есть широковещательный приемник для входящих смс-сообщений. Обычный текст работает нормально, но эмодзи отображаются как странные символы ().
Соответствующий код:
class SmsReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val pdus = intent.extras?.get("pdus") as Array<ByteArray>
pdus.map { SmsMessage.createFromPdu(it) }
.forEach { Log.i("Receiver", "Got message ${it.displayMessageBody}") }
}
Сообщение, которое я отправляю эмулятору: ????????????
Что я получаю в своем файле журнала: I/Receiver: Got message
Кто-нибудь знает, как получить правильный текст сообщения?
ОБНОВЛЕНИЕ
Итак, покопавшись в кроличьей норе кодировок и библиотеки EmojiCompat, я обнаружил, что проблема связана с самим эмулятором. Когда я взял второй телефон и попробовал его на реальном устройстве, он просто сработал. Я создал ошибку вместе с разработчиками Android, поэтому, надеюсь, у них есть исправление: https://issuetracker.google.com/issues/149141727