如何获取已发送短信的送达报告?

4
在我的应用程序中,我使用SMS Manager发送文本短信。为了检查消息是否已经发送,我使用Toast。但是我想要获取SMS交付报告而不是Toast。 我尝试了很多例子,但是有一个问题,即当我的余额为0时发送SMS时,我的代码没有显示传递报告。因此,我希望在我的余额为0时寻找发送失败的短信交付报告。
代码:
String phoneNo = phno.getText().toString();
String smsBody = body.getText().toString(); 
 //Selected Messages to report to 1909
{
             try
             {
                
                 SmsManager smsManager = SmsManager.getDefault();
                 smsManager.sendTextMessage(phoneNo, null, smsBody, null, null); 
                 Toast.makeText(getApplicationContext(), "SMS Sent to: "+phoneNo,Toast.LENGTH_SHORT).show();
             }                           
             catch (Exception e)
             {
                 //Error Occurred if No Messages Selected 
                 Toast.makeText(getApplicationContext(),"SMS failed, please try again later!",Toast.LENGTH_SHORT).show();
                 e.printStackTrace();
             }
             }
         
    }
2个回答

7

请尝试此链接:

Android中的短信送达报告

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

        }
    }

不要忘记在清单文件中添加这些权限。
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 

1
使用这种方法发送短信。
public void sendTextMessage (String destinationAddress, String scAddress, String text, 
PendingIntent sentIntent, PendingIntent deliveryIntent)

eg

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

其中deliveredPI是PendingIntent。

最后一个参数是deliveryIntent,当短信成功发送到收件人时,Android会触发它。

因此,现在您需要一个BroadcastReceiver来获取此消息。

BroadcastReceiver deliveryBroadcastReciever = new deliverReceiver();

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

    }
}

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