gpt4 book ai didi

Android SMSManager sendTextMessage - 我收到 sentIntent 但从未收到 deliveryIntent

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:03 28 4
gpt4 key购买 nike

我们在 Android 上使用 SMSManager 从设备向其他人发送短信。

我们有用户没有收到我们认为已发送的 SMS 的报告,这是基于 sentIntent 是通过 Activity.RESULT_OK 调用的事实 - 但当本地 SMS 服务只是将消息排队等待发送时,这似乎会发生不一定是真正发送的时候。

所以我认为我们应该使用 deliveryIntent。

这里的问题是我总是收到 sentIntent 回调,但从来没有收到 deliveryIntent 回调。

有什么想法吗?代码在下面,谢谢。

        // The intent action to be unique so that we can have multiple
// concurrent pending intents.
// http://developer.android.com/reference/android/app/PendingIntent.html
String intentAction = TAG + "-" + callbackId; // callbackId is unique
Intent intent = new Intent(intentAction);
intent.putExtra("phoneNumber", phoneNumber);
intent.putExtra("callbackId", callbackId);
intent.putExtra("message", message);

PendingIntent sentPI = PendingIntent.getBroadcast(
cordova.getActivity(), 0, intent, 0);

cordova.getActivity().registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
String sentToPhoneNumber = intent.getStringExtra("phoneNumber");
String callbackId = intent.getStringExtra("callbackId");
String message = intent.getStringExtra("message");
int resultCode = getResultCode();
int status = -1;
String details = "";
logger.log(Level.INFO, TAG + " SENT intent!! to: " +
sentToPhoneNumber + ", resultCode: " + resultCode);
switch (resultCode) {
case Activity.RESULT_OK:
status = 0;
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
details = "No service";
case SmsManager.RESULT_ERROR_NULL_PDU:
details = "Null PDU";
case SmsManager.RESULT_ERROR_RADIO_OFF:
details = "Radio off";
status = 1;
break;
}

JSONObject obj = new JSONObject();
try {
obj.put("status", status);
obj.put("details", details);
obj.put("phone_number", sentToPhoneNumber);
obj.put("message", message);
} catch (JSONException e) {
throw new RuntimeException(e);
}
sendAsyncResultStatus(callbackId, obj);
ctx.unregisterReceiver(this);
}
}, new IntentFilter(intentAction));

// The intent action to be unique so that we can have multiple
// concurrent pending intents.
// http://developer.android.com/reference/android/app/PendingIntent.html
String deliveryIntentAction = TAG + "-Delivery-" + callbackId;
Intent deliveryIntent = new Intent(deliveryIntentAction);
deliveryIntent.putExtra("phoneNumber", phoneNumber);
deliveryIntent.putExtra("callbackId", callbackId);
deliveryIntent.putExtra("message", message);

PendingIntent deliveryPI = PendingIntent.getBroadcast(
cordova.getActivity(), 0, deliveryIntent, 0);

cordova.getActivity().registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
logger.log(Level.INFO, TAG + " DELIVERY intent YOYO!!");
String sentToPhoneNumber = intent.getStringExtra("phoneNumber");
String callbackId = intent.getStringExtra("callbackId");
String message = intent.getStringExtra("message");
String pdu = intent.getStringExtra("pdu");
logger.log(Level.INFO, TAG + " DELIVERY intent!! to: " +
sentToPhoneNumber + ", pdu: " + pdu);

JSONObject obj = new JSONObject();
try {
obj.put("pdu", pdu);
obj.put("phone_number", sentToPhoneNumber);
obj.put("message", message);
} catch (JSONException e) {
throw new RuntimeException(e);
}
sendAsyncResultStatus(callbackId, obj);
ctx.unregisterReceiver(this);
}
}, new IntentFilter(deliveryIntentAction));

smsManager.sendTextMessage(phoneNumber, null, message, sentPI, deliveryPI);

最佳答案

DeliveryIntent 取决于某些承运人提供的 DeliveryReports。

有些承运商提供 DeliveryReports,有些则不提供。 DliveryReports的运营商支持分为三类...

  • 提供商根本不提供 DeliveryReport。
  • 供应商总是提供虚假的 DeliveryReport(即使是无效号码,您也会收到 OK 报告)
  • 提供商确实提供了交付报告。

复杂性并不止于此...如果您的提供商(发送提供商)确实支持传递报告,那么当您向同一运营商的订户发送消息时,您将主要获得传递报告。但是,当您在该运营商之外发送消息时,您可能会或可能不会收到送达报告。在大多数情况下,您不会。

这可能是由多种原因引起的,例如

  • 目的地提供商不支持送达报告
  • 一些中间 SMS 网关不支持发送报告
  • 目的地承运人或某些中间网关的 DeliveryReports 与始发承运人的不兼容。

据我所知,这种情况下的送货报告不是有保证的信息。

关于Android SMSManager sendTextMessage - 我收到 sentIntent 但从未收到 deliveryIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324977/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com