在安卓中,”发送短信广播”通常指通过 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.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 | 动态权限检查 |
解答: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);
解答:
AndroidManifest.xml
中声明 SEND_SMS
。