SmsManager
类来发送短信,并可以通过监听器捕获发送状态。Android 发短信广播
在 Android 开发中,发送短信是一项基本功能,由于涉及用户隐私和安全问题,Android 系统对发送短信的操作进行了严格的权限控制,本文将详细介绍如何在 Android 应用中实现发送短信的功能,包括请求权限、创建意图(Intent)以及处理用户交互等步骤。
一、添加权限
需要在AndroidManifest.xml
文件中声明发送短信的权限:
<uses-permission android:name="android.permission.SEND_SMS" />
二、检查和请求权限
从 Android 6.0(API 级别 23)开始,需要在运行时请求敏感权限,以下是如何在代码中检查和请求发送短信的权限:
1. 检查权限
private boolean hasSendSmsPermission() { return ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED; }
2. 请求权限
private void requestSendSmsPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE_SEND_SMS); }
三、发送短信
一旦拥有了必要的权限,就可以使用SmsManager
类来发送短信,以下是一个完整的示例:
1. 获取SmsManager
实例
SmsManager smsManager = SmsManager.getDefault();
2. 分割消息(如果需要)
如果消息长度超过 160 个字符,需要将其分割为多个部分:
ArrayList<String> messageParts = smsManager.divideMessage("这是一条很长的消息");
3. 发送短信
smsManager.sendMultipartTextMessage("目的地电话号码", null, messageParts, null, null);
四、处理用户交互
为了提高用户体验,通常需要处理用户的确认对话框,尤其是在发送短信之前,以下是一个示例:
1. 显示确认对话框
new AlertDialog.Builder(this) .setTitle("发送短信") .setMessage("确定要发送这条短信吗?") .setPositiveButton("确定", (dialog, which) -> { if (hasSendSmsPermission()) { requestSendSmsPermission(); } else { sendSms("目的地电话号码", "短信内容"); } }) .setNegativeButton("取消", null) .show();
2. 发送短信方法
private void sendSms(String phoneNumber, String message) { if (!hasSendSmsPermission()) { requestSendSmsPermission(); return; } SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); }
五、处理权限请求结果
当用户响应权限请求时,需要处理结果:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, grantResults); if (requestCode == REQUEST_CODE_SEND_SMS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被授予,可以发送短信 sendSms("目的地电话号码", "短信内容"); } else { // 权限被拒绝,提示用户 Toast.makeText(this, "发送短信需要权限", Toast.LENGTH_SHORT).show(); } } }
六、完整代码示例
以下是一个完整的 Android 活动示例,展示了如何实现上述所有步骤:
public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE_SEND_SMS = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button_send_sms).setOnClickListener(v -> { new AlertDialog.Builder(MainActivity.this) .setTitle("发送短信") .setMessage("确定要发送这条短信吗?") .setPositiveButton("确定", (dialog, which) -> { if (hasSendSmsPermission()) { sendSms("目的地电话号码", "短信内容"); } else { requestSendSmsPermission(); } }) .setNegativeButton("取消", null) .show(); }); } private boolean hasSendSmsPermission() { return ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED; } private void requestSendSmsPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE_SEND_SMS); } private void sendSms(String phoneNumber, String message) { if (!hasSendSmsPermission()) { requestSendSmsPermission(); return; } SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, grantResults); if (requestCode == REQUEST_CODE_SEND_SMS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { sendSms("目的地电话号码", "短信内容"); } else { Toast.makeText(this, "发送短信需要权限", Toast.LENGTH_SHORT).show(); } } } }
通过以上步骤,你可以在 Android 应用中实现发送短信的功能,需要注意的是,由于涉及到用户隐私和安全问题,发送短信的操作需要严格遵循 Android 系统的权限管理机制,在实际开发中,还应该考虑更多的边界情况和错误处理,以确保应用的稳定性和安全性。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1270250.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复