如何在SmsManager中使用sendMultimediaMessage?

问题描述 投票:0回答:1

我目前正在开发一个 React Native 应用程序来发送短信。我使用 smsManager.sendMultipartTextMessage() 成功发送了消息,但遇到了一些设备将消息作为拆分部分接收的问题。这似乎是与运营商或设备本身有关的问题,我无法解决。因此,我希望改用发送彩信。

我尝试使用 smsManager.sendMultimediaMessage() ,如本页所述:sendMultimediaMessage

但是,我不断遇到失败,我相信问题可能与创建 PDU 文件有关。

我参考了这个网站的数据格式: 数据格式

尽管尝试了很多次,但还是没能成功,所以我正在寻求帮助。如何正确创建 contentUri,它是 smsManager.sendMultimediaMessage() 的第二个参数?

消息应在后台发送,而无需打开默认消息应用程序。

我的代码是这样的

@ReactMethod
  public void sendDirectSms(String phoneNumber, String msg) {
    try {
      SmsManager smsManager = SmsManager.getDefault();
      // create MMS 
      ContentValues mmsValues = new ContentValues();
      mmsValues.put(Telephony.Mms.SUBJECT, "Subject");

      Uri mmsUri = this.context.getApplicationContext().getContentResolver().insert(Telephony.Mms.CONTENT_URI, mmsValues);
      if (mmsUri == null) {
        Log.e("SendDirectSms", "Failed to create MMS message.");
        return;
      }

      String messageId = mmsUri.getLastPathSegment();

      // add adress
      Uri addrUri = Uri.withAppendedPath(mmsUri, "addr");
      ContentValues addrValues = new ContentValues();
      addrValues.put(Telephony.Mms.Addr.MSG_ID, messageId);
      addrValues.put(Telephony.Mms.Addr.ADDRESS, phoneNumber);
      addrValues.put(Telephony.Mms.Addr.TYPE, 137);
      // addrValues.put(Telephony.Mms.Addr.TYPE, PduHeaders.TO);
      Uri insertedAddrUri = this.context.getApplicationContext().getContentResolver().insert(addrUri, addrValues);

      // // 3. add text part
      Uri partUri = Uri.withAppendedPath(mmsUri, "part");
      ContentValues partValues = new ContentValues();
      partValues.put(Telephony.Mms.Part.MSG_ID, messageId);
      partValues.put(Telephony.Mms.Part.CONTENT_TYPE, "text/plain");
      partValues.put(Telephony.Mms.Part.TEXT, msg);
      Uri insertedPartUri = context.getApplicationContext().getContentResolver().insert(partUri, partValues);

      smsManager.sendMultimediaMessage(this.context.getApplicationContext(), mmsUri, null, null, null);
    } catch (Exception ex) {
      System.out.println("couldn't send message.");
    }
  }

每当我尝试发送彩信时,都不会出现错误消息,但当我检查默认消息应用程序时,彩信并未发送。

java react-native mms smsmanager android-mms
1个回答
0
投票

你解决了吗?我也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.