android - 如何监控每条已发送短信的状态?

标签 android sms

我开发了向多个人发送 SMS 的代码。但目前的问题是我不知道哪个人收到了消息,哪个发送失败。我想知道每条短信的发送状态和接收方电话号码,可以吗?

最佳答案

这是您正在寻找的代码 fragment ......

//---sends an SMS message to another device---

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);

    //---when the SMS has been sent---
    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;
            }
        }
    }, new IntentFilter(SENT));

    //---when the SMS has been delivered---
    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));        

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);        
}

关于android - 如何监控每条已发送短信的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4639778/

相关文章:

android - 如何在 Android 中正确实现 progressBar?

java - 关于 isConnectingOrConnecting 的替代编码?

android - 如何在一组特定 fragment 之间共享 ViewModel 范围,而不使用 NavGraphs 或将其范围限定到 Activity ?

Android Null-Pointer-Exception 找不到解决办法

php - 想要使用 PHP 发送短信并从数据库获取结果

android - 错误 "java.lang.NoClassDefFoundError: com.google.repacked.apache.commons.io.FileUtils"

ios - Firebase 身份验证 iOS 12 无效 token

sms - 双向短信 - 发送/接收

iphone - 使用 VBA 和 CDO 邮件对象通过 SMS 将向上箭头 `↑` 字符发送到 iPhone

android - 如何以编程方式启动android手机?