Android6.0发送短信Demo
来源:互联网 发布:arcgis能安装在mac吗 编辑:程序博客网 时间:2024/06/10 01:27
整理一下使用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卡的原因?
0 0
- Android6.0发送短信Demo
- Android6.0的SMS(短信)源码分析--短信发送
- Android6.0的SMS(短信)源码分析--短信发送
- java 发送短信demo
- Android6.0短信获取
- android实现发送短信demo
- Android demo之发送短信
- Android 实现发送短信demo
- Android6.0下的短信接收与发送功能的实现
- Android6.0指纹解锁demo
- Android6.0指纹解锁demo
- java 实现阿里大于 发送短信demo
- python3 阿里云短信发送Demo
- java调用短信api接口发送短信demo实例
- 实现短信接口发送短信的小demo
- Android6.0短信装逼生成器
- Android6.0的SMS(短信)源码分析--短信接收
- Android6.0的SMS(短信)源码分析--短信接收
- 王爽汇编第二册:将每个单词的前四位改为大写字母
- 20160918
- Android UI 之 ListView
- Java死锁实例代码
- 深入理解CSS3 Animation 帧动画(step详解)
- Android6.0发送短信Demo
- java基础知识
- Unity Editor(二)C#特性与Editor
- ANSI C,C90,C99
- mac下安装docker
- java基础知识(续)
- hdu 5893 List wants to travel 树链剖分 +线段树
- Android RecyclerView 使用完全解析 体验艺术般的控件
- java基础知识-继承