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

安卓发送短信代码

在Android中使用SmsManager发送短信需先声明SEND_SMS权限,示例代码:创建 SmsManager对象,定义目的地址和文本,调用sendTextMessage()方法,注意处理运行时权限。(59字)

Android发送短信的两种方式

使用SmsManager直接发送短信

SmsManager是Android提供的用于管理短信发送的工具类,支持直接发送短信到指定号码。

核心步骤:

安卓发送短信代码

  1. 添加权限:android.permission.SEND_SMS
  2. 动态申请权限(Android 6.0+)
  3. 调用SmsManager.getDefault().sendTextMessage()发送短信

代码示例:

// 1. 在AndroidManifest.xml中添加权限
/
<uses-permission android:name="android.permission.SEND_SMS"/>
/
// 2. 检查并申请权限(Android 6.0+)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) 
    != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.SEND_SMS}, 1);
} else {
    sendSms("1234567890", "Hello World");
}
// 3. 发送短信的方法
private void sendSms(String phoneNumber, String message) {
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(phoneNumber, null, message, null, null);
}
// 4. 处理权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        sendSms("1234567890", "Hello World");
    } else {
        Toast.makeText(this, "SMS Permission Denied", Toast.LENGTH_SHORT).show();
    }
}

通过隐式Intent调用系统短信应用

此方法无需申请SEND_SMS权限,但会打开系统短信界面,用户需手动确认发送。

安卓发送短信代码

代码示例:

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

两种方法对比

特性 SmsManager直接发送 隐式Intent调用
是否需要权限 是(SEND_SMS
是否需要用户确认 否(直接发送) 是(需手动确认)
适用场景 自动化发送(如验证码) 用户主动触发发送
兼容性 需处理权限适配 天然兼容所有版本
是否需要打开短信应用

常见问题与解答

问题1:如何监听短信发送成功或失败?

解答:
使用SmsManager.sendTextMessage()的第四个参数PendingIntent来接收发送状态:

// 创建用于接收发送状态的PendingIntent
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, 
    new Intent("SMS_SENT_ACTION"), PendingIntent.FLAG_UPDATE_CURRENT);
// 注册广播接收器
registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch(getResultCode()) {
            case Activity.RESULT_OK:
                Toast.makeText(context, "SMS Sent Successfully", Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                Toast.makeText(context, "SMS Sending Failed", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}, new IntentFilter("SMS_SENT_ACTION"));
// 发送短信时传入sentIntent
smsManager.sendTextMessage(phoneNumber, null, message, sentIntent, null);

问题2:如果用户拒绝授予SEND_SMS权限怎么办?

解答:
onRequestPermissionsResult中处理权限被拒绝的情况,例如提示用户或禁用相关功能:

安卓发送短信代码

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            sendSms("1234567890", "Hello World");
        } else {
            Toast.makeText(this, "Without SMS Permission, Function Disabled", Toast.LENGTH_SHORT).show();
            // 可选:禁用发送按钮或相关功能
        }
    }
}