上一篇
安卓发送短信广播
- 行业动态
- 2025-04-22
- 7
安卓发送短信广播实现指南
核心概念
在安卓中,”发送短信广播”通常指通过 BroadcastReceiver
监听或触发短信相关事件,需注意:
- 发送短信:直接使用
SmsManager
发送短信(无需广播)。 - 监听短信广播:通过
BroadcastReceiver
监听系统短信事件(如接收短信)。 - 自定义短信广播:通过自定义广播触发短信发送逻辑。
关键权限与配置
权限 | 用途 | 声明位置 |
---|---|---|
SEND_SMS |
发送短信 | AndroidManifest.xml |
RECEIVE_SMS |
监听接收短信(可选) | AndroidManifest.xml |
READ_PHONE_STATE |
获取手机状态(部分场景) | AndroidManifest.xml |
动态权限申请(Android 6.0+):
// 检查并请求权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE); }
发送短信的两种方式
直接使用 SmsManager
SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("目标号码", null, "短信内容", null, null);
通过自定义广播触发短信发送
步骤 1:定义广播动作
public static final String CUSTOM_SMS_ACTION = "com.example.SEND_SMS";
步骤 2:发送广播
Intent intent = new Intent(CUSTOM_SMS_ACTION); intent.putExtra("phoneNumber", "123456789"); intent.putExtra("message", "Hello"); sendBroadcast(intent); // 或 LocalBroadcastManager(推荐)
步骤 3:接收广播并发送短信
public class SmsBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String phone = intent.getStringExtra("phoneNumber"); String msg = intent.getStringExtra("message"); SmsManager.getDefault().sendTextMessage(phone, null, msg, null, null); } }
监听系统短信广播(高级)
用途:监听收到的短信(需 RECEIVE_SMS
权限)。
// 静态注册(AndroidManifest.xml) <receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> // 动态注册(Android 8.0+ 推荐) IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(new SmsReceiver(), filter);
常见问题与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
权限被拒 | 未申请 SEND_SMS |
动态申请权限 |
广播未触发 | 未注册 Receiver |
检查静态/动态注册逻辑 |
短信未发送 | 权限不足或号码错误 | 检查权限 & 号码格式 |
单元表格归纳
类别 | 关键类/方法 | 作用 |
---|---|---|
发送短信 | SmsManager.sendTextMessage |
直接发送短信 |
自定义广播 | sendBroadcast() |
触发自定义逻辑 |
接收广播 | BroadcastReceiver.onReceive |
处理广播事件 |
权限管理 | ContextCompat.checkSelfPermission |
动态权限检查 |
相关问题与解答
问题 1:如何监听短信发送结果?
解答:SmsManager.sendTextMessage
的第四个参数是 PendingIntent
,用于接收发送状态。
// 创建 PendingIntent PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent(SENT_ACTION), 0); // 注册广播接收器 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: // 发送成功 break; default: // 发送失败 break; } } }, new IntentFilter(SENT_ACTION)); // 发送短信时传入 sentIntent SmsManager.getDefault().sendTextMessage("123", null, "test", sentIntent, null);
问题 2:Android 13 如何适配发送短信权限?
解答:
- 添加权限声明:在
AndroidManifest.xml
中声明SEND_SMS
。 - 动态申请权限:运行时请求权限(与 Android 6.0+ 相同)。
- 隐私合规:需在应用内明确告知用户短信功能用途,避免违反隐私政策