SmsManager.OnSendCompletedListener
接口来实现。当短信成功发送或失败时,系统会调用相应的回调方法。在Android中,发送短信通常需要使用SmsManager类,以下是一个简单的示例,展示了如何使用SmsManager发送短信并处理回调。
1、需要在AndroidManifest.xml文件中添加以下权限:
2、创建一个方法来发送短信:
private void sendSms(String phoneNumber, String message) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); }
3、处理发送短信的回调:
为了处理发送短信的回调,我们需要实现一个BroadcastReceiver,创建一个名为SmsSentReceiver的类,继承自BroadcastReceiver:
public class SmsSentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_SENT")) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu); String sender = smsMessage.getDisplayOriginatingAddress(); String body = smsMessage.getDisplayMessageBody(); Log.d("SMS", "Sender: " + sender + ", Body: " + body); } } } } }
4、在AndroidManifest.xml文件中注册SmsSentReceiver:
5、调用sendSms方法发送短信:
String phoneNumber = "1234567890"; // 替换为目标手机号码 String message = "Hello, this is a test message!"; // 替换为要发送的消息内容 sendSms(phoneNumber, message);
这样,当短信发送成功时,SmsSentReceiver的onReceive方法将被调用,我们可以在其中处理发送短信的回调。
下面是一个描述Android中发送短信及其回调的介绍:
步骤 | 操作 | 说明 |
1 | 导入权限 | 在AndroidManifest.xml中添加发送短信的权限 |
2 | 初始化SmsManager | SmsManager是Android系统提供用于发送短信的类 |
3 | 发送短信 | 使用SmsManager的sendTextMessage方法发送短信 |
4 | 设置回调 | 为发送过程设置结果回调 |
参数/回调 | 说明 | |
发送短信权限 |
| |
初始化SmsManager | SmsManager smsManager = SmsManager.getDefault(); | |
sendTextMessage参数 | smsManager.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); | |
phoneNumber | 接收者的电话号码 | |
message | 要发送的短信文本 | |
sentPI | 发送状态回调(PendingIntent) | |
deliveredPI | 送达状态回调(PendingIntent) | |
回调类型 | PendingIntent动作 | 说明 |
发送状态回调 | SENT | 当短信发送成功或失败时触发 |
送达状态回调 | DELIVERED | 当短信被接收者设备成功接收时触发 |
回调处理 | 操作 | |
发送状态处理 | 在发送回调的PendingIntent中定义一个广播接收器(BroadcastReceiver)来处理发送状态 | |
送达状态处理 | 在送达回调的PendingIntent中定义一个广播接收器(BroadcastReceiver)来处理送达状态 |
下面是如何在代码中设置回调的例子:
// 创建发送状态的PendingIntent PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0); // 创建送达状态的PendingIntent PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0); // 注册发送和送达的广播接收器(在onCreate中注册,onDestroy中注销) // 发送短信 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
然后在广播接收器中处理这些回调:
// 创建广播接收器 private BroadcastReceiver smsSentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: // 短信发送成功 break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: case SmsManager.RESULT_ERROR_NO_SERVICE: case SmsManager.RESULT_ERROR_NULL_PDU: case SmsManager.RESULT_ERROR_RADIO_OFF: // 发送失败,处理错误 break; } } }; private BroadcastReceiver smsDeliveredReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: // 短信送达成功 break; // 送达状态没有错误代码,通常只关心是否送达 } } }; // 在onCreate中注册广播接收器 registerReceiver(smsSentReceiver, new IntentFilter("SMS_SENT")); registerReceiver(smsDeliveredReceiver, new IntentFilter("SMS_DELIVERED")); // 在onDestroy中注销广播接收器 @Override protected void onDestroy() { unregisterReceiver(smsSentReceiver); unregisterReceiver(smsDeliveredReceiver); super.onDestroy(); }
请注意,从Android 4.4 (KitKat) 开始,对于非默认的短信应用,需要通过调用SmsManager.getSmsManagerForSubscriptionId(subscriptionId)
来获取SmsManager
实例,并且发送短信的权限需要用户明确的授予,在最新的Android版本中,Google也引入了更加严格的权限管理,可能还需要处理运行时权限的问题。