整理一下使用SmsManager类发送短信的方法。
https://developer.android.com/reference/android/telephony/SmsManager.html

SmsManager类的描述如下图:

使用的关键方法是sendTextMessage()发短信。
https://developer.android.com/reference/android/telephony/SmsManager.html#sendTextMessage(java.lang.String,%20java.lang.String,%20java.lang.String,%20android.app.PendingIntent,%20android.app.PendingIntent)
该方法的使用说明如下图:


根据以上资料,结合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;@Overrideprotected 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<String> 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 关闭当前弹窗dialog.dismiss();}});AlertDialog dialog = builder.show();}}// 处理权限申请的回调@Overridepublic 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卡的原因?

【Android】Android6.0发送短信Demo相关推荐

  1. android 11.0屏蔽短信功能(短信发送开关)

    1.概述 11.0定制化开发中,需要去掉短信发送功能,这就要从发送短信的流程中来分析了,从流程中了解是如何发送短信的,然后从短信的发送部分,根据系统属性来决定是否继续走完发送短信的流程 2.屏蔽短信功 ...

  2. Android 12.0 屏蔽短信功能(短信发送开关)

    1.概述 在12.0定制化开发中,在一些wifi产品中,需要去掉短信发送功能,这就要从发送短信的流程中来分析了,从流程中了解是如何发送短信的,然后从短信的发送部分,根据系统属性来决定是否继续走完发送短 ...

  3. Android开发之发送短信

    本实例通过SmsManager的sendTextMessage方法实现发送短信关于SmsManager的具体解释大家能够參照:Android开发之SmsManager具体解释 实例执行效果图: 程序代 ...

  4. Android接收和发送短信

    每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Ac ...

  5. android开发之发送短信SMS

    之前也查了一些资料和博客,我在我的应用中加了一个用户反馈的界面,其实就是给我发一条短信. 具体代码如下. /***@ 参数说明* destinationAddress:收信人的手机号码* scAddr ...

  6. android 4.0 原生短信,Android 4.0 短信发不出去解决办法

    我的Nexus S 年前就刷成4.0 了,昨天因为手机流量太大,花了我100块钱,我去看了是自己的手机Exchange服务浪费了大量的流量,但是不知道是为什么,于是昨天晚上用*#4636#*#*去查看 ...

  7. Android使用Intent发送短信SMS

    SMS全称为短讯服务(Short Messaging Service) 两种发送短信方式: 方法一.使用Intent发送短信 Intent smsIntent = new Intent();smsIn ...

  8. 用阿里云短信服务--发送短信demo

    一. AccessKey管理 内容包括:开启子用户AccessKey,创建用户组,给用户组添加sms短信服务权限,创建用户,添加用户到用户组中. 详细操作: 登录阿里云,点击控制台右上角的头像,点击A ...

  9. Android APP 如何发送短信?

    权限配置 低级版本的android版本里,使用配置表的方式. 在AndroidManifest文件中配置权限. <!-- 发送消息--> <uses-permission andro ...

最新文章

  1. 2018-3-8(论文--网络评论中的非结构化信息表示与研究)笔记-----基于证据理论的网络评论综合方法
  2. 我把帮带份饭的信息错发给导师后.......
  3. 操作系统编写之引导扇区
  4. 数据结构:栈、队列、数组、链表、红黑树结构的特点
  5. 20172314 2018-2019-1《程序设计与数据结构》第四周学习总结
  6. 对计算机财务管理的理解,计算机财务管理
  7. Android Studio1.4.x JNI开发基础 - 简单实例
  8. 在ubuntu上安装Oracle Java SDK
  9. regsvr32.exe是什么东西
  10. C语言程序设计 授课日历 2010年春季
  11. 整数进制转换技巧以及相关算法题讲解(简洁易懂)
  12. java项目账户充值提现_资金充值提现明细
  13. VUE使用echarts实现中国地图航线动态展示
  14. 远程办公和分布式协作
  15. 谷歌要收购这家脑电波控制器公司
  16. 郑州共享美容院小程序开发如何操作?
  17. CAD数据在柔性制造中的重要作用
  18. Android开发之仿QQ表情实现(下)
  19. Android使用NFC模拟IC卡
  20. html5考试总结300字,中段考试总结作文300精选集锦

热门文章

  1. 常用SQL语句(增删查改、合并统计、模糊搜索)
  2. zend studio9.0.4正式版破解方法
  3. Android学习之调用系统相机实现拍照功能
  4. Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
  5. 声明式事务、Spring 中常用注解、Ajax
  6. Tcpdump抓包命令使用
  7. JAVA设计模式 - 工厂方法模式
  8. java setr()_Java RPr.setRFonts方法代码示例
  9. INF=0x3f3f3f3f背后的知识
  10. 浅谈C语言static关键字 静态变量 函数