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;
// обработать сообщение
}