当前位置:首页 > 行业动态 > 正文

安卓发送短信广播

安卓发送短信广播实现指南


核心概念

在安卓中,”发送短信广播”通常指通过 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 如何适配发送短信权限?

解答

  1. 添加权限声明:在 AndroidManifest.xml 中声明 SEND_SMS
  2. 动态申请权限:运行时请求权限(与 Android 6.0+ 相同)。
  3. 隐私合规:需在应用内明确告知用户短信功能用途,避免违反隐私政策