【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;
@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<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() {
@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卡的原因?
【Android】Android6.0发送短信Demo的更多相关文章
- android: 接收和发送短信
8.2 接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 A ...
- android 几种发送短信的方法
android中发送短信很简单, 首先要在Mainfest.xml中加入所需要的权限: ? 1 2 3 <uses-permission android:name="android.p ...
- Android开发之发送短信
本实例通过SmsManager的sendTextMessage方法实现发送短信关于SmsManager的具体解释大家能够參照:Android开发之SmsManager具体解释 实例执行效果图: 程序代 ...
- Android 中发送短信
import android.net.Uri; //调用Android系统API发送短信 Uri uri = Uri.parse("smsto:" + strSmsPhone_va ...
- MonkeyRunner执行Python脚本实例——发送短信增强版
很久之前就写好的了,准备写个自动执行Monkey的脚本时才想到去找它,还是写在博客里找起来方便. 这次更新了批处理自动连接设备后执行Py脚本,结构如下图: 其中shotscreen为存放截图文件夹,s ...
- android发送短信验证码并自动获取验证码填充文本框
android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...
- android 中调用接口发送短信
android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...
- Android 学习第13课,android 实现发送短信的功能
1. 界面布局 界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- java攻城师之路(Android篇)--搭建开发环境、拨打电话、发送短信、布局例子
一.搭建开发环境 1.所需资源 JDK6以上 Eclipse3.6以上 SDK17, 2.3.3 ADT17 2.安装注意事项 不要使用中文路径 如果模拟器默认路径包含中文, 可以设置android_ ...
随机推荐
- Oracle 12C -- purge dba_recyclebin
SQL> create user abce identified by abce; User created. SQL> grant resource,connect to abce; G ...
- 【iOS开发-36】Bundle Identifier的中文字符变成-的问题
在创建新项目时,Bundle Identifier=Organization Identifier+Product Name.可是它们对中文的识别统一变成短横线 - . 所以在创建多个项目的时候,须要 ...
- MFC添加自定义窗口消息
原文链接: http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html 1. 在头文件stdafx.h中增加一个自定义消息宏 ...
- python 字符串编码 ,区别 utf-8 和utf-8-sig
Python 读取文件首行多了"\ufeff"字符串 python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错: Traceback (mos ...
- MSSQL2005:“超时时间已到。在操作完成之前超时时间已过或服务器未响应”
1.今天在整合项目中有这样一个需求,就是要改变以存在表字段的文本的大小,如把char(15)改成varchar(50). 2.此时以存在表已有1885742条数据,在直接下面进行调用 ALTER TA ...
- 各Spring-Boot-Starters介绍(转)
原文传送门:Spring Boot application starters ↑传送门里有各Spring-Boot-Starters的依赖pom.xml(一般人我不告诉他) 注意:此为初订版,博主渣翻 ...
- vs 2017打包安装包(印象深刻)
Visual Studio Install 打包安装项目2017 以下是具体步骤 一.安装环境 1.下载:链接地址 2.安装vs2017的时候需要安装依赖 .NET framework 4.6 .下载 ...
- 简单理解MapView 以及 设置 MKAnnotationView
MKMapView 相当于一个容器 .可以展示 MKAnnotationView.. 要使用它需要设置 数据源代理 _mapView.delegate = self; 它的数据源对象就是 符合 ...
- c# vs2010 excel 上传oracle数据
excel 数据表上传到oracle数据库.过程例如以下: 1.打开本地excel文件 2.用OleDb连接excel文件 3.将来excel的数据读取到dataset中 4.把dataset 中数据 ...
- Android build.gradle
apply plugin: 'com.android.application' android { /*编译版本 , 因此我们强烈推荐总是使用最新的 SDK 进行编译 targetSdkVersion ...