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

安卓发送短信权限

安卓发送短信权限基础

权限声明

AndroidManifest.xml 中声明发送短信权限:

安卓发送短信权限  第1张

<uses-permission android:name="android.permission.SEND_SM" />

动态权限申请(Android 6.0+)

发送短信属于危险权限,需在运行时动态申请。

申请流程:

  1. 调用 ActivityCompat.requestPermissions() 发起权限请求。
  2. onRequestPermissionsResult() 中处理用户响应。

示例代码:

// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE_SMS);
} else {
    // 已有权限,执行发送短信操作
}
// 处理权限结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_CODE_SMS) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限授予,执行发送短信
        } else {
            // 权限被拒绝,提示用户
        }
    }
}

发送短信的两种方式

方式 说明 适用场景
隐式 Intent 通过 ACTION_SENDTOACTION_VIEW 触发系统短信应用 用户手动确认发送内容
SmsManager API 直接调用系统 API 发送短信,无需用户干预 自动化发送(需权限)

隐式 Intent 发送短信

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:" + phoneNumber)); // 目标手机号
intent.putExtra("sms_body", "短信内容");
startActivity(intent);

SmsManager 发送短信

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, messageContent, null, null);

权限被拒绝的常见问题与解决方案

问题 解决方案
用户拒绝权限 弹出对话框解释权限用途,引导用户重新授权
用户勾选“不再询问” 跳转至系统设置页,引导用户手动开启权限
Android 13+ 限制 需在 Manifest 中声明 android:permissionGroup(如 android.permission-group.SMS

跳转设置页代码:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);

权限相关注意事项

  1. 权限分组SEND_SMS 属于 SMS 权限组,申请时需按组处理。
  2. Android 13+ 新增限制:需在 Manifest 中声明 <system-permission name="..." />(如系统级应用)。
  3. 隐私政策:申请敏感权限需在隐私政策中明确说明用途。

相关问题与解答

问题1:用户永久拒绝权限后如何恢复?

解答
无法通过代码强制恢复,需引导用户手动进入设置页开启权限,可提示用户:

  • 点击弹窗中的“去设置”按钮。
  • 手动找到应用并启用权限。
    示例代码参考上方“跳转设置页”。

问题2:如何兼容不同 Android 版本的权限逻辑?

解答

  1. Android 6.0+:必须动态申请危险权限。
  2. Android 13+:需在 Manifest 中声明系统权限(如 <system-permission name="android.permission.SEND_SMS" />)。
  3. 低版本兼容:通过 Build.VERSION.SDK_INT 判断版本,避免调用高版本特有
0