Xamarin Androin сервис прослушивания входящих SMS

В приложении Android Service создаю приёмник SMS сообщений:

RegisterReceiver(new SmsReceiver(), new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));

Метод SmsReceiver.OnReceive:

public override void OnReceive(Context context, Intent intent) {

    if (intent.Action.Equals(Telephony.Sms.Intents.SmsReceivedAction)) {
        Android.Telephony.SmsMessage[] smsMessages = Telephony.Sms.Intents.GetMessagesFromIntent(intent);

        foreach (var message in smsMessages) {
            System.Diagnostics.Debug.WriteLine("MESSAGE: " + message.MessageBody);
        }
    }
}

Вопрос в следующем: когда длина текста в SMS сообщений превышает 67 символов, происходит разбитие на два SMS сообщения - 67 символов в первом и остальное во втором. Оба сообщения содержатся в массиве smsMessages. Как избавиться от этой проблемы? Как понять, что пришло 2 разных сообщения (не важно от одно и того же отправителя или от разных), а не одно разбитое на 2?


Ответы (1 шт):

Автор решения: aepot

Это не разбитие происходит, это смски изначально разбитые приходят. Это особенность смс протокола. Вам надо их просто склеить в одну.

Причем для смсок на английском порог не 67 символов, а вроде 129.

public override void OnReceive(Context context, Intent intent)
{
    if (!intent.Action.Equals(Telephony.Sms.Intents.SmsReceivedAction))
        return;
     
    Android.Telephony.SmsMessage[] smsMessages = Telephony.Sms.Intents.GetMessagesFromIntent(intent);
    string messageBody = string.Concat(smsMessages.Select(m => m.MessageBody));
    string address = smsMessages[0].OriginatingAddress;
     
    // обработать сообщение
}
→ Ссылка