我们正在使用Android上的SMSManager从设备向其他人发送短信.
我们已经有报告称用户没有收到我们认为是基于sentIntent通过Activity.RESulT_OK调用这一事实而发送的短信 – 但这似乎发生在本地短信服务简单地将消息排队以进行传递而不一定当它真正发送.
所以我认为我们应该使用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(即使是无效的数字,你也会得到一个好的报告)
>提供商确实提供交付报告.
复杂功能并不止于此……如果您的提供商(发送提供商)确实支持发送报告,您将在向同一 *** 作符的订户发送消息时获得发送报告.但是当您在此承运人之外发送邮件时,您可能会或可能不会收到投递报告.在大多数情况下,你不会.
这可能是由于各种原因造成的,例如
>目标提供商不支持发送报告
>某些中间SMS网关不支持传送报告
>目的地 *** 作符或某些中间网关的DeliveryReports与Originating CarrIErs的运输报告不兼容.
到目前为止,在这种情况下的交付报告并不是我所知的有保证的信息.
总结以上是内存溢出为你收集整理的Android SMSManager sendTextMessage – 我收到sentIntent但从未获得deliveryIntent全部内容,希望文章能够帮你解决Android SMSManager sendTextMessage – 我收到sentIntent但从未获得deliveryIntent所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)