发送短信
通过Android提供的发送短信API来实现。
因为 Android 6.0 改变了它的授权机制,故而程序比以前复杂。
activity_main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.xiesir.example03sendsms.MainActivity"> <EditText android:id="@+id/etPhone" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入电话号码" android:inputType="phone" /> <EditText android:id="@+id/etContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="6" android:hint="请输入短信内容" android:gravity="top" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" android:onClick="send" android:layout_gravity="center" /> </LinearLayout>
MainActivity.java文件:
package com.xiesir.example03sendsms; import android.Manifest; import android.content.pm.PackageManager; import android.os.Build; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.EditText; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { String phone, content; final public static int SEND_SMS = 101; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 参考 https://developer.android.com/training/permissions/requesting.html // 参考 https://developer.android.com/intl/zh-cn/training/permissions/requesting.html public void send(View v) { EditText etPhone = (EditText) findViewById(R.id.etPhone); EditText etContent = (EditText) findViewById(R.id.etContent); phone = etPhone.getText().toString(); content = etContent.getText().toString(); // // 适用于 Android 6.0 以前的版本 // // 获取发送短信API // SmsManager sm = SmsManager.getDefault(); // // // 将长短信分割成短短信,如果多于 36个中文字符 分条发送 // ArrayList<String> sms = sm.divideMessage(content); // for (String string : sms) // // 参数:目标号码,短信中心地址,短信正文,发送状态,对方是否收到状态 // sm.sendTextMessage(phone, null, string, null, null); // // // 短信发送完毕,通知用户 // Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Build.VERSION_CODES.M == 23,即 Android 6.0 ,也即 API 23 // checkSelfPermission() 检查是否有权限 // 如果用户同意授权,该方法返回PackageManager.PERMISSION_GRANTED(一个值为0的常量)。如果用户拒绝授权,该方法返回PackageManager.PERMISSION_DENIED(一个值为-1的常量) int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS); // 请求权限 if (permissionCheck != PackageManager.PERMISSION_GRANTED) { // 当应用程序调用requestPermissions(),系统会显示一个标准的对话框(该对话框无法定制)给用户。 // 当应用程序请求权限,系统向用户提供了一个对话框。当用户响应,系统调用应用程序的onRequestPermissionsResult()方法,并传递相应参数。你可以重写该方法,在该方法中,查看是否请求授权成功。 ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.SEND_SMS}, SEND_SMS); return; } else { sendSms(phone, content); } } else { sendSms(phone, content); } } public void sendSms(String phoneNo, String content) { try { SmsManager sm = SmsManager.getDefault(); // 将长短信分割成短短信,如果多于 36个中文字符 分条发送 ArrayList<String> sms = sm.divideMessage(content); for (String string : sms) // 参数:目标号码,短信中心地址,短信正文,发送状态,对方是否收到状态 sm.sendTextMessage(phoneNo, null, string, null, null); // 短信发送完毕,通知用户 Toast.makeText(getApplicationContext(), "短信发送成功", Toast.LENGTH_LONG).show(); } catch (Exception ex) { Toast.makeText(getApplicationContext(), "短信发送失败...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } } // 当应用程序请求权限,系统向用户提供了一个对话框。当用户响应,系统调用应用程序的onRequestPermissionsResult()方法,并传递相应参数。你可以重写该方法,在该方法中,查看是否请求授权成功。 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case SEND_SMS: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) sendSms(phone, content); else Toast.makeText(getApplicationContext(), "拒绝发送短信", Toast.LENGTH_SHORT).show(); break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } }
参考:
Android 6.0 后的新授权机制
https://developer.android.com/training/permissions/requesting.html
https://developer.android.com/intl/zh-cn/training/permissions/requesting.html
http://gold.xitu.io/entry/55e2fa1a00b075a5f29a261c
http://timmy6.github.io/2016/03/15/requestPermission/
http://wuxiaolong.me/2016/02/04/RuntimePermission/
浙公网安备 33010602011771号