我目前正在开发一个 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.");
}
}
每当我尝试发送彩信时,都不会出现错误消息,但当我检查默认消息应用程序时,彩信并未发送。
你解决了吗?我也有同样的问题。