Как правило, это зависит от размера отправляемого сообщения - если сообщение превышает лимит одного сообщения (и в вашем случае это звучит примерно в 3 раза больше лимита одного сообщения), вы получите отправку иотчет о доставке для каждой части сообщения.Поскольку вы не разделяете сообщение вручную, вы не можете указать разные намерения для каждой части.
Стоит взглянуть на SmsManager.divideMessage () , чтобы разделить сообщение самостоятельно изатем в SmsManager.sendMultiPartTextMessage () для фактической отправки.Это позволяет вам указать разные ожидающие намерения для разных частей сообщения, и, таким образом, вы можете определить, когда сообщение было окончательно отправлено.
Я думаю, что эмулятор обрабатывает все пункты назначения сообщений как точные и, поскольку нет сети длявернитесь и скажите, что в противном случае вы, скорее всего, не получите сообщение об ошибке отправки из эмулятора (если вы не сделали что-то вроде перевода эмулятора в режим полета).Из опыта вы наверняка получаете эти коды ошибок на реальном устройстве.
Редактировать: Думая об этом, вы также регистрируете получателя каждый раз, когда отправляете сообщение, код, который я использую, имеетманифест зарегистрированного получателя.Существует вероятность того, что вы зарегистрировали его несколько раз (он длится столько времени, сколько требуется для контекста, который вы регистрируете), что дало бы его вам несколько раз - это также заставило бы его повторить, вероятно, 9 раз для 3 сообщений (при условии регистрациив третий раз сделал это до того, как отправка была завершена для первого) - возможно, но я не знаю, насколько вероятно.Вы можете сравнительно хорошо протестировать, зарегистрировав объект в зарегистрированном получателе.
Это сокращенная версия кода, который я использую для отправки смс-сообщений, он не получает повторных ответов на сообщения:
ArrayList<String> split = SmsManager.getDefault().divideMessage(message);
ArrayList<PendingIntent> success = new ArrayList<PendingIntent>(partInfo.length);
Intent sendInt = null;
for (int i = 0; i < partInfo.length; i++)
{
sendInt = new Intent(context.getPackageName() + RELAY_INTERNAL_RESPONSE);
sendInt.putExtra(KEY_MESSAGEID, messageID);
sendInt.putExtra(KEY_PART_NUMBER, i);
sendInt.putExtra(KEY_REPLY_SEND_INTENT, sendIntAction);
sendInt.putExtra(KEY_NUMBER, number);
PendingIntent sendResult = PendingIntent.getBroadcast(context, i, sendInt, PendingIntent.FLAG_ONE_SHOT); //You have to use an incrementing request code to ensure you don't just get the same pending intent.
success.add(sendResult);
}
ArrayList<PendingIntent> receipt = new ArrayList<PendingIntent>(partInfo.length);
sendInt = new Intent(context.getPackageName() + RELAY_INTERNAL_RECEIPT);
sendInt.putExtra(KEY_MESSAGEID, messageID);
sendInt.putExtra(KEY_REPLY_RECEIPT_INTENT, receiptIntAction);
sendInt.putExtra(KEY_NUMBER, number);
PendingIntent sendResult = PendingIntent.getBroadcast(context, nextReceiptCounter(context), sendInt, PendingIntent.FLAG_ONE_SHOT);
for (int i = 0; i < partInfo.length; i++)
{
receipt.add(sendResult);
}
SmsManager sm = SmsManager.getDefault();
sm.sendMultipartTextMessage(target, null, split, success, receipt);
И мое определение получателя:
<receiver android:name="<package>.SMSBroadcastModule"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="<package>.RELAY_INTERNAL_RESPONSE" />
<action android:name="<package>.RELAY_INTERNAL_RESPONSE_RECEIPT" />
</intent-filter>
</receiver>