【问题标题】:SMS Delivery Report in Android [closed]Android中的短信发送报告[关闭]
【发布时间】:2016-04-18 22:20:26
【问题描述】:

我想获得 SMS 发送报告我正在尝试很多示例,但是,一个流程不显示发送报告,例如当我的代码中的 SMS 发送未显示 SMS 发送报告失败时我的余额为 0,否则显示报告如无服务等。 . 我想在余额为0时查找短信发送失败报告。

帮我写任何代码!

提前致谢!

【问题讨论】:

    标签: android


    【解决方案1】:
    BroadcastReceiver sendBroadcastReceiver = new SentReceiver();
        BroadcastReceiver deliveryBroadcastReciever = new DeliverReceiver();;
    
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
    
            try {
                unregisterReceiver(sendBroadcastReceiver);
                unregisterReceiver(deliveryBroadcastReciever);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        try {
            unregisterReceiver(sendBroadcastReceiver);
            unregisterReceiver(deliveryBroadcastReciever);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
        send_sms.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (textView.getText().toString().equals("")
                            | textView.getText().toString().equals(null)) {
                        Toast.makeText(SendSMS.this, enter_ph_no, Toast.LENGTH_LONG)
                                .show();
                    } else {
    
    
                            sendSMS(textView.getText().toString(), "sms_content");
                            finish();
    
    
                    }
    
                }
            });
    private void sendSMS(String phoneNumber, String message) {
            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 sms = SmsManager.getDefault();
            sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
    
    
        }
    
        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();
                    startActivity(new Intent(SendSMS.this, ChooseOption.class));
                    overridePendingTransition(R.anim.animation, R.anim.animation2);
                    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;
                }
    
            }
        }
    

    【讨论】:

    • 如何注销Receiver()?我成为一个exaption?有什么想法吗?
    • 使用更新后的答案
    • @Manikandan 对彩信有什么想法吗?
    • 任何想法为什么即使发送到固定电话或无效的电话号码也总是返回 Result.OK?
    • 我怎样才能知道交货来自哪个号码?!在 DeliverReceiver 中为交付添加了更多数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2014-08-07
    相关资源
    最近更新 更多