На 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 при получении трансляции от вашего получателя манифеста.

Другие вопросы по тегам