На Android MMS-сообщение продолжает поступать
Я пытаюсь создать приложение, которое будет обрабатывать функции SMS и MMS и работать как приложение по умолчанию.
Для отправки MMS я использую API klinker https://github.com/klinker41/android-smsmms
Я сохраняю отправленное MMS на телефон с помощью контент-провайдера (создаю фиктивное SMS, создаю MMS его MMS-частью и в конце удаляю фиктивное SMS)
Когда я получаю MMS через службу вещания и сохраняю MMS в папке "Входящие", я должен что-то отправить обратно оператору?
Потому что телефон снова получает через день или два одинаковые MMS.
1 ответ
Я стер свой старый ответ и, возможно, у меня есть еще информация для вас, если вы все еще обеспокоены.
Я обнаружил, что столкнулся с очень похожей проблемой с некоторыми, но не со всеми телефонами, которые отправляют мне сообщения Mms. Итак, когда я получу Mms, есть кое-что, что вы могли бы и, вероятно, должны отправить обратно на телефон, который отправил вам сообщение.
То, что вы отправляете обратно, называется "AcknowledgeInd". AcknowledgeInd - это открытый класс, который расширяет "GenericPdu". Этот AcknowledgeInd находится в Интернете или в библиотеке Klinker, если вы просматриваете его.
В Интернете также есть несколько очень сухих и скучных официальных материалов о том, что такое AcknowledgeInd вместе с ReadRecInd и всеми остальными, если вам интересно.
Вам нужно будет создать этот AcknowledgeInd и отправить его обратно в виде сообщения Mms тому, кто отправил сообщение на ваше устройство.
Build Ack Ind:
ack_ind = new AcknowledgeInd(mms_version, pdu_trans_ID.getBytes());
return new PduComposer(application_context, ack_ind).make();
PduComposer.make () возвращает байт [], который вы затем используете для отправки Mms.
/*"mms_send_file" is created here and used only inside of sendMmsViaCarrier();
* It is then deleted inside handleSmsMmsSent() after the Mms has been sent whether
* successful or not*/
final String mms_file_name = "send." + String.valueOf(Math.abs(new Random().nextLong())) + ".dat";
File mms_follow_up_file = new File(application_context.getCacheDir(), mms_file_name);
FileOutputStream байта [] в "mms_follow_up_file".
Создайте Uri для использования в качестве аргумента в методе sms_manager.sendMultimediaMessage().
Uri content_uri = (new Uri.Builder())
//.authority("com.example.android.apis.os.MmsFileProvider")
//.authority(getBaseContext().getPackageName() + ".MmsFileProvider")
.authority(application_context.getPackageName() + ".MmsFileProvider")
.path(mms_file_name)
.scheme(ContentResolver.SCHEME_CONTENT)
//.scheme(ContentResolver.SCHEME_FILE)
.build();
Затем вызовите метод Android для отправки:
sms_manager.sendMultimediaMessage(application_context, content_uri, null, null, pending_intent_mms_follow_up);
ЗАМЕТКИ:
Всегда используйте "ApplicationContext" для этого материала Mms. Вам понадобится "Идентификатор транзакции", доступный как часть NotificationInd, который является тем, что извлекается и становится доступным для вас Android при получении трансляции от вашего получателя манифеста.