Подтвердить что ты не робот

Отправка длинных смс-сообщений

У меня есть приложение, которое позволяет пользователям отправлять sms-сообщения. Отлично работает, когда сообщение < 160 символов. После этого все работает не так - отлично. Похоже, здесь есть несколько вариантов:

  • Вручную разбить сообщение на несколько SMS-сообщений, отправить каждую часть в виде отдельного SMS-сообщения.
  • Используйте функцию отправки нескольких частей (sendMultipartTextMessage()).
  • Отправьте сообщение как MMS-сообщение (sendDataMessage()?).

Здесь мои новички берут на себя:

1) наиболее хорошо поддерживается между операторами. Пользователи могут рассердиться, что вы просто стоите им N отдельных сообщений, но вместо того, чтобы конвертировать в MMS или что-то еще.

2) не уверен, поддерживается ли это другими операторами и читается, что, когда сообщение больше 3 * 160 символов в длину, все равно преобразуется в MMS в разных приложениях SMS - возможно, избегайте этого вообще.

3) не знаете, как это сделать, а старые телефоны могут не поддерживать MMS. Чтобы отправить MMS с помощью SDK Android, мы просто используем метод SmsManager.sendDataMessage()?

Спасибо

4b9b3361

Ответ 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, но этот счет может зависеть от реализации поставщика услуг.