安卓:已发送短信的pendingIntent

4
这是我用于在Android应用中发送短信的代码:
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();
    }
}

一切正常,我可以发送短信,我的两个广播接收器在短信发送和传递时都会触发。在我的国家,每一个传递消息的确认都需要付费,即使在我的设备上我可以免费发送很多消息,但我的余额会减少。 我可能错过了一些设置,需要设置以避免传递消息确认,或者如果实际上是问题,我需要删除“已传递”的pendingIntent? 你能给我更多信息吗? 谢谢

1个回答

1
如果您不想请求交付,则必须将 null 作为最后一个参数传递。 sms.sendTextMessage(phoneNumber, null, message, sentPI, null); Android 文档 如果不是 NULL,则在消息发送到接收者时广播此 PendingIntent。状态报告的原始 PDU 在扩展数据 ("pdu") 中。 因此,如果设置为 NULL,则不会请求任何交付。 在我的设备上进行了检查。

谢谢你的回答 ;) - Ant4res

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接