代码之家  ›  专栏  ›  技术社区  ›  K. Ondřej

如何找出哪些短信尚未发送或发送?

  •  0
  • K. Ondřej  · 技术社区  · 8 年前

    我的代码每30秒发送1-5条短信,所以当toast“sms not delivered”出现时,我不知道哪条短信没有发送。我不知道这样做是否正确,但这是解决这个问题最常见的方法

    public boolean sendSMS(String id, String num, String msg) {
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";
    
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
                SENT), 0);
    
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);
    
        registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
    
        registerReceiver(deliveryBroadcastReciever, new 
     IntentFilter(DELIVERED));
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage("xxxxxxxx", null, msg, sentPI, deliveredPI);
    
        Log.e("Message Sent", num + "  " + msg + "  " + id);
    
        return true;
    }
    
    
    class DeliverReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent arg1) {
    
    
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "sms delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(getBaseContext(), "sms not delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
    
        }
    }
    
    class SentReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent arg1) {
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "sms sent", Toast.LENGTH_SHORT)
                            .show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT)
                            .show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off",
                            Toast.LENGTH_SHORT).show();
                    break;
            }
    
        }
    

    我很抱歉我的英语不好。

     public boolean sendSMS(String id, String num, String msg) {
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";
    
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
                SENT), 0);
    
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);
    
        registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
    
        registerReceiver(deliveryBroadcastReciever, new IntentFilter(DELIVERED));
    
        smsManager.sendTextMessage("+xxxxxxxxxx", null, msg, sentPI, deliveredPI);
    
        Log.e("Message Sent", num + "  " + msg + "  " + id);
    
        return true;
    }
    
    
    public class DeliverReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            final Bundle bundle = intent.getExtras();
    
            try {
    
                if (bundle != null){
                    final Object[] bObject = (Object[]) bundle.get("pdus");
    
                    for (int i = 0; i < bObject.length; i++){
    
                        SmsMessage current = SmsMessage.createFromPdu((byte[]) bObject[i]);
                        String phoneNum = current.getDisplayOriginatingAddress();
                    }
                }
            }catch (Exception e){
                Log.e("Deliver Reciever",e.toString());
            }
        }
    }
    

    调试屏幕截图: http://imgur.com/a/GulgP

    1 回复  |  直到 8 年前
        1
  •  0
  •   Chris Maggiulli    8 年前

    final SmsManager sms = SmsManager.getDefault();
    
    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();
        String phone = "";
        SmsMessage smsMessage;
    
        try {
    
            if (bundle != null) {
    
                final Object[] pdu = (Object[]) bundle.get("pdu");
    
                for (int i = 0; i < pdu.length; i++) {
    
                     smsMessage = SmsMessage.createFromPdu((byte[]) pdu[i]);
                     phone = current.getDisplayOriginatingAddress();
                }
            }
        }
    }