Отправка длинных смс-сообщений
У меня есть приложение, которое позволяет пользователям отправлять sms-сообщения. Отлично работает, когда сообщение < 160 символов. После этого все работает не так - отлично. Похоже, здесь есть несколько вариантов:
- Вручную разбить сообщение на несколько SMS-сообщений, отправить каждую часть в виде отдельного SMS-сообщения.
- Используйте функцию отправки нескольких частей (sendMultipartTextMessage()).
- Отправьте сообщение как MMS-сообщение (sendDataMessage()?).
Здесь мои новички берут на себя:
1)
наиболее хорошо поддерживается между операторами. Пользователи могут рассердиться, что вы просто стоите им N отдельных сообщений, но вместо того, чтобы конвертировать в MMS или что-то еще.
2)
не уверен, поддерживается ли это другими операторами и читается, что, когда сообщение больше 3 * 160 символов в длину, все равно преобразуется в MMS в разных приложениях SMS - возможно, избегайте этого вообще.
3)
не знаете, как это сделать, а старые телефоны могут не поддерживать MMS. Чтобы отправить MMS с помощью SDK Android, мы просто используем метод SmsManager.sendDataMessage()?
Спасибо
Ответы
Ответ 1
мне кажется, что первый вариант - это то, что делают большинство мобильных телефонов по умолчанию. sms-сообщения по дизайну могут отправлять только определенное количество символов (160 probbaly), просто сообщите пользователю, что сообщение слишком велико, и если он все равно хочет его отправить (в любом случае, сообщив также, сколько sms было бы общим).
как для MMS и multipart, как вы сказали, не каждый оператор поддерживает его, поэтому они не кажутся лучшим вариантом.
EDIT: как работает MMS на android-sdk, проверьте эту тему: Android SDK MMS
Ответ 2
Это довольно старый пост, но он очень высок в Google при поиске мультиплеерных смс, так что, возможно, это помогает кому-то.
Что касается частей 1 и 2, это почти то же самое. Чтобы использовать sendMultipartTextMessage, вам нужно разбить длинное сообщение на ArrayList of Strings. Затем он отправляет столько SMS, сколько необходимо. Короче говоря:
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(longMessage);
sms.sendMultipartTextMessage(phoneNumber, null, parts, null, null);
Часть 3: MMS не является вариантом, как было указано. Обвинения и все.
Ответ 3
Я бы предложил использовать вариант 2, когда вы работаете с телефонами на базе Androids GSM.
Мобильное устройство на базе GSM заботится о сегментации, в которой разбиваются сообщения на multiparts для отправки в выполненном, а также для сборки многостраничных сообщений в одно сообщение при получении.
Если у вас есть метод, который позаботится о отправке текстовых сообщений, то по умолчанию используйте параметры manager.divideMessage, поскольку он будет работать, даже если требуемые сегменты сообщений всего 1.
Я не думаю, что у вас возникли проблемы с отправкой сообщений с использованием опции 2, и это также гарантирует, что получатель получит сообщение в виде единого сообщения.
Иначе нам нужно написать свой собственный стек протоколов, в котором вы записываете ссылочный номер и количество сообщений для получателя, чтобы понять и воссоздать полное сообщение; что не очень сложно. Мы можем использовать байт-массивы с заголовками, и сообщения могут быть отправлены в кодировке base64.
Также я не очень разбираюсь в ограничениях, которые перевозчики применяют в отношении количества сегментов в многочастном сообщении; основанный на моем тесте, я смог правильно отправить и получить 160 * 8 сегментов. На основе стандартов GSM сегменты могут быть до 255, но этот счет может зависеть от реализации поставщика услуг.