博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】Android6.0发送短信Demo
阅读量:7208 次
发布时间:2019-06-29

本文共 3956 字,大约阅读时间需要 13 分钟。

整理一下使用SmsManager类发送短信的方法。

SmsManager类的描述如下图:

这里写图片描述

使用的关键方法是sendTextMessage()发短信。

该方法的使用说明如下图:
这里写图片描述


根据以上资料,结合Andriod6.0的运行时权限,发短信Demo如下:

public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1; private EditText et_number; private EditText et_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取控件 et_number = (EditText) findViewById(R.id.et_number); et_content = (EditText) findViewById(R.id.et_content); } // 在XML中指定的按钮回调方法 public void Send(View v){ // 检查是否获得了权限(Android6.0运行时权限) if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED){ // 没有获得授权,申请授权 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.SEND_SMS)) { // 返回值:// 如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.// 如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.// 如果设备策略禁止应用拥有这条权限, 这个方法也返回false. // 弹窗需要解释为何需要该权限,再次请求授权 Toast.makeText(this, "请授权!", Toast.LENGTH_LONG).show(); // 帮跳转到该应用的设置界面,让用户手动授权 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); }else{ // 不需要解释为何需要该权限,直接请求授权 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, MY_PERMISSIONS_REQUEST_SEND_SMS); } }else { // 已经获得授权,可以发短信 SendSms(); } } private void SendSms() { // 获取数据内容 String number = et_number.getText().toString(); String content = et_content.getText().toString(); // 为空判断 if (TextUtils.isEmpty(number)||TextUtils.isEmpty(content)) { // 提醒用户 Toast.makeText(this, "号码或内容不能为空!", Toast.LENGTH_SHORT).show(); } else { // 使用SmsManager类 SmsManager smsManager = SmsManager.getDefault(); // 短信内容可能很长,需要分发 ArrayList
parts = smsManager.divideMessage(content); // 发送短信,需要权限// smsManager.sendMultipartTextMessage(number, null, parts, null, null); for(String text : parts) { smsManager.sendTextMessage(number, null, text, null, null); } // 发送完成后弹窗提示 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("已发送!") .setNegativeButton("好!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 关闭当前弹窗 dialog.dismiss(); } }); AlertDialog dialog = builder.show(); } } // 处理权限申请的回调 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode){ case MY_PERMISSIONS_REQUEST_SEND_SMS: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 授权成功,继续发短信 SendSms(); } else { // 授权失败! Toast.makeText(this, "授权失败!", Toast.LENGTH_LONG).show(); } break; } } }}

要点小结:

  • 使用SmsManager类发送短信。
  • 使用SmsManager.getDefault()来获得SmsManager类实例。
  • 短信内容过长时,需要使用divideMessage()方法来分割。
  • 号码和短信内容需要加上为空判断,否则报错非法参数异常。
  • 【重要】只在真机上可行,也许是模拟器没有SIM卡的原因?
你可能感兴趣的文章
struts1——静态ActionForm与动态ActionForm
查看>>
Razor入门
查看>>
设计模式---装饰模式(Decorator)
查看>>
Ubuntu 16.04下轻量级文件搜索工具Catfish
查看>>
百度编辑器ueditor给上传的图片加入水印
查看>>
P2746 [USACO5.3]校园网Network of Schools
查看>>
项目构建之make工具
查看>>
Hadoop安装教程_单机/伪分布式配置
查看>>
浏览器拦截跨域请求处理方法
查看>>
[软件渲染器入门]五-平面着色和高氏着色
查看>>
【总结】设备树对platform平台设备驱动带来的变化(史上最强分析)【转】
查看>>
二进制(signed or unsigned)补码
查看>>
C# 委托
查看>>
正則表達式
查看>>
粗略。。。java设计模式总结。。。studying
查看>>
Java面试题集
查看>>
php截取中文字符串无乱码的方法
查看>>
adb server is out of date.killing的解决办法
查看>>
WebService工作原理及传输安全问题
查看>>
RobotFramework+Selenium2+Appium环境搭建
查看>>