【问题标题】:On Android MMS message keeps on being received在 Android 彩信上不断收到
【发布时间】:2017-09-12 04:11:41
【问题描述】:

我正在尝试创建一个可以处理 SMS 和 MMS 功能并充当默认应用程序的应用程序。

为了发送彩信,我使用 klinker 的 API https://github.com/klinker41/android-smsmms

我使用内容提供商将发送的 MMS 存储到手机(创建虚拟 SMS,创建 MMS 其 MMS 部分,最后,我删除虚拟 SMS)

当我通过广播服务接收彩信并将彩信存储在收件箱中时,我应该向运营商发送一些内容吗?

因为手机在一两天后再次收到相同的彩信。

【问题讨论】:

    标签: android mms


    【解决方案1】:

    我已经删除了我的旧答案,如果您仍然担心,可能会为您提供更多信息。

    我发现我在一些但不是所有向我发送彩信的手机上遇到了非常相似的问题。好的,所以当我收到彩信时,您可以并且可能应该将某些内容发回给您发送消息的手机。

    您发回的内容称为:“AcknowledgeInd”。 AcknowledgeInd 是一个公共类 扩展“GenericPdu”。这个 AcknowledgeInd 可以在网上找到,也可以在 Klinker Library 中找到。

    如果您有兴趣,网上也有一些关于 AcknowledgeInd 实际是什么以及 ReadRecInd 和所有其他内容的非常枯燥乏味的官方资料。

    您需要构建此 AcknowledgeInd 并将其发送回 Mms 消息给向您的设备发送消息的人。

    构建确认信息:

            ack_ind = new AcknowledgeInd(mms_version, pdu_trans_ID.getBytes());
    
            return new PduComposer(application_context, ack_ind).make();
    

    PduComposer.make() 返回一个字节[],然后你用它来发送彩信。

        /*"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);
    

    注意事项:

    对于这个 Mms 内容,始终使用“ApplicationContext”。 您将需要作为 NotificationInd 的一部分提供的“交易 ID”,它是 Android 在从您的清单接收器接收到广播时检索并提供给您的内容。

    【讨论】:

    • 我的问题是,当我使用上述库/api 收到彩信时,我使用内容提供程序将其内容(不是附件)保存在彩信“存储”中。一两天后,我再次收到来自移动运营商的相同彩信。这是正确的还是我在最初接受彩信的过程中遗漏了一些东西。
    • 我只用那个库来发送彩信,也没有接收。我将不得不更仔细地查看图书馆以尝试提供帮助,但这很难,因为我需要有关您的问题的更多信息。你用的是什么版本的安卓?您知道向您发送消息的设备和 Android 版本吗?
    • 您知道如何查询 PendingMessages 吗?这可以为您的问题提供一些见解?
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 2011-07-28
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多