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

安卓发送短信的权限

安卓发送短信的权限说明

基础权限配置

AndroidManifest.xml 中需声明以下权限:
| 权限名称 | 作用范围 |
|————————|———————————-|
| SEND_SMS | 允许应用直接发送短信 |
| READ_SMS(可选) | 允许读取设备中的短信内容 |
| RECEIVE_SMS(可选) | 允许接收短信(需配合广播接收器) |

注意:从 Android 10(API 29)开始,SEND_SMS 权限被标记为“危险权限”,需动态申请。


动态权限申请(Android 6.0+)

  1. 检查权限状态

    安卓发送短信的权限  第1张

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) 
            != PackageManager.PERMISSION_GRANTED) {
        // 未授权,需申请
    }
  2. 请求权限

    ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE_SEND_SMS);
  3. 处理回调结果

    @Override
    public void onRequestPermissionsResult(int requestCode, 
        @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CODE_SEND_SMS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限已授予,可发送短信
            } else {
                // 权限被拒绝,提示用户或关闭功能
            }
        }
    }

发送短信的两种方式

方式 是否需要 SEND_SMS 权限 适用场景
通过 SmsManager 直接发送短信(需动态权限)
通过 Intent 调用系统短信应用 否(仅需要 ACTION_SENDTO 用户手动确认发送(推荐)

示例代码(SmsManager

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("目标号码", null, "短信内容", null, null);

Android 10+ 的特殊限制

  • 沙盒机制:第三方应用默认无法直接发送短信,需用户手动授予特殊权限。
  • 替代方案:使用 SEND_AUTH_SMS 权限(需用户在设置中手动开启),或通过 ACTION_SENDTO Intent 跳转到系统短信应用。

常见问题与解决方案

问题 解决方案
权限申请被拒绝 提示用户前往系统设置手动授权,或降级功能(如改用 Intent 跳转)。
Android 10+ 无法发送短信 使用 SEND_AUTH_SMS 权限(需用户授权),或通过 Intent 调用系统短信应用。
应用崩溃 检查是否遗漏权限声明,或未处理权限回调的 denied 情况。

相关问题与解答

问题1:如何判断设备是否支持发送短信?

解答
可通过 TelephonyManager 检查设备是否具备短信功能:

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
boolean isSmsCapable = tm.getSimState() == TelephonyManager.SIM_STATE_READY;

若返回 false,则设备可能无 SIM 卡或未激活。


问题2:如何避免因权限问题导致应用崩溃?

解答

  1. 检查权限后再执行操作:在发送短信前,确保已获取 SEND_SMS 权限。
  2. 处理权限拒绝逻辑:若用户拒绝权限,可禁用发送短信功能或提示用户前往设置开启。
  3. 兼容 Android 10+:优先使用 ACTION_SENDTO Intent,减少对危险权限的依赖
0