【Android】Android6.0发送短信Demo
整理一下使用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相关推荐
- android 11.0屏蔽短信功能(短信发送开关)
1.概述 11.0定制化开发中,需要去掉短信发送功能,这就要从发送短信的流程中来分析了,从流程中了解是如何发送短信的,然后从短信的发送部分,根据系统属性来决定是否继续走完发送短信的流程 2.屏蔽短信功 ...
- Android 12.0 屏蔽短信功能(短信发送开关)
1.概述 在12.0定制化开发中,在一些wifi产品中,需要去掉短信发送功能,这就要从发送短信的流程中来分析了,从流程中了解是如何发送短信的,然后从短信的发送部分,根据系统属性来决定是否继续走完发送短 ...
- Android开发之发送短信
本实例通过SmsManager的sendTextMessage方法实现发送短信关于SmsManager的具体解释大家能够參照:Android开发之SmsManager具体解释 实例执行效果图: 程序代 ...
- Android接收和发送短信
每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Ac ...
- android开发之发送短信SMS
之前也查了一些资料和博客,我在我的应用中加了一个用户反馈的界面,其实就是给我发一条短信. 具体代码如下. /***@ 参数说明* destinationAddress:收信人的手机号码* scAddr ...
- android 4.0 原生短信,Android 4.0 短信发不出去解决办法
我的Nexus S 年前就刷成4.0 了,昨天因为手机流量太大,花了我100块钱,我去看了是自己的手机Exchange服务浪费了大量的流量,但是不知道是为什么,于是昨天晚上用*#4636#*#*去查看 ...
- Android使用Intent发送短信SMS
SMS全称为短讯服务(Short Messaging Service) 两种发送短信方式: 方法一.使用Intent发送短信 Intent smsIntent = new Intent();smsIn ...
- 用阿里云短信服务--发送短信demo
一. AccessKey管理 内容包括:开启子用户AccessKey,创建用户组,给用户组添加sms短信服务权限,创建用户,添加用户到用户组中. 详细操作: 登录阿里云,点击控制台右上角的头像,点击A ...
- Android APP 如何发送短信?
权限配置 低级版本的android版本里,使用配置表的方式. 在AndroidManifest文件中配置权限. <!-- 发送消息--> <uses-permission andro ...
最新文章
- 2018-3-8(论文--网络评论中的非结构化信息表示与研究)笔记-----基于证据理论的网络评论综合方法
- 我把帮带份饭的信息错发给导师后.......
- 操作系统编写之引导扇区
- 数据结构:栈、队列、数组、链表、红黑树结构的特点
- 20172314 2018-2019-1《程序设计与数据结构》第四周学习总结
- 对计算机财务管理的理解,计算机财务管理
- Android Studio1.4.x JNI开发基础 - 简单实例
- 在ubuntu上安装Oracle Java SDK
- regsvr32.exe是什么东西
- C语言程序设计 授课日历 2010年春季
- 整数进制转换技巧以及相关算法题讲解(简洁易懂)
- java项目账户充值提现_资金充值提现明细
- VUE使用echarts实现中国地图航线动态展示
- 远程办公和分布式协作
- 谷歌要收购这家脑电波控制器公司
- 郑州共享美容院小程序开发如何操作?
- CAD数据在柔性制造中的重要作用
- Android开发之仿QQ表情实现(下)
- Android使用NFC模拟IC卡
- html5考试总结300字,中段考试总结作文300精选集锦