Android发送短信等待Intent

时间:2016-03-24 16:17:12

标签: android sms

我使用以下代码在我的Android应用中发送短信:

    PendingIntent pending = PendingIntent.getBroadcast(activity, 0, new Intent(PENDING), 0);
    activity.registerReceiver(new BroadcastReceiver() {
        public void onReceive(Context arg0, Intent intent) {
            switch (getResultCode()) {
                case Activity.RESULT_OK: {
                    sendJsonData(false);
                    break;
                }

                case SmsManager.RESULT_ERROR_GENERIC_FAILURE: {
                    sendJsonData(true);
                    break;
                }

                case SmsManager.RESULT_ERROR_NO_SERVICE: {
                    sendJsonData(true);
                    break;
                }

                case SmsManager.RESULT_ERROR_NULL_PDU: {
                    sendJsonData(true);
                    break;
                }

                case SmsManager.RESULT_ERROR_RADIO_OFF: {
                    sendJsonData(true);
                    break;
                }
            }
        }

        private void sendJsonData(boolean error) {
        }
     }, new IntentFilter(PENDING));

    PendingIntent deliveryIntent = PendingIntent.getBroadcast(activity, 0, new Intent(DELIVERED), 0);
    activity.registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Log.i(TAG, "got here");
                    break;
                case Activity.RESULT_CANCELED:
                    Log.i(TAG, "got here");
                    break;
            }
        }
    }, new IntentFilter(DELIVERED));

我的问题是当我得到RESULT_OK时,如何知道游标适配器的_id列?我以后需要这个ID。我可以稍后检查_id但是有没有办法从pendingIntent获取它?

我在发送后deliveryIntent没有收到任何回调信息。

1 个答案:

答案 0 :(得分:1)

  

我的问题是当我得到RESULT_OK时,如何知道游标适配器的_id列?

您可以在SMS提供程序上放置ContentObserver,以便在写入消息时接收回调,然后查询提供程序以获取消息ID。我在my answer here中有一个如何做到这一点的例子。您只需将"thread_id"更改为"_id"

  

我可以稍后检查_id,但有没有办法从pendingIntent获取它?

不幸的是,没有。 Intent除了结果代码之外不会传递太多信息。它可能附加一些附加内容 - 例如,SIM卡插槽号 - 但它不会由SMS ContentProvider分配ID。

  

我在发送后deliveryIntent没有回复任何回调。

这并不罕见。只有在收到服务中心的确认后才会触发PendingIntent,但并非每个无线提供商都提供此功能。