Android:已发送 SMS pendingIntent

Android: Delivered SMS pendingIntent

这是我在 Android 应用程序中发送 SMS 消息的代码:

private void SendSMS(final String message,final String phoneNumber)
{
    SmsManager sms = SmsManager.getDefault();
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, 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;
            default: 
                break;
            }
        }
    }, new IntentFilter(Constants.SENT));
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, 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;                        
            }
        }
    }, new IntentFilter(DELIVERED));        
    try{
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
    }catch(Exception e){
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), EXCEPTION, Toast.LENGTH_LONG).show();
    }
}

一切正常,我可以发送 SMS,并且在发送和传递 SMS 时触发我的两个广播接收器。 在我的国家/地区,必须支付每条已发送消息的确认费用,即使在我的设备上我可以免费发送大量消息,我的信用也会降低。 我错过了一些设置,我必须设置以避免传递消息确认或者我必须删除 "delivered" pendingIntent 如果确实是问题所在? 你能给我更多的信息吗? 谢谢

如果您不想请求送货,您必须传递 null 作为最后一个参数

sms.sendTextMessage(phoneNumber, null, message, sentPI, null);

Android 文档

if not NULL this PendingIntent is broadcast when the message is delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").

因此,如果您设置 NULL,它将不会请求任何递送。检查我的设备。