Android SmsManager ( 短信管理器 )
Android SmsManager ( 短信管理器 ),见名知意,就是用来管理手机短信的
而该类的应用场景并不多,一般是我们发短信的时候才会用到这个 API,当然这种短信是 文字短信,对于彩信过于复杂,而且在 QQ 微信各种社交 APP 横行的年代,你会去发 1 块钱一条的 彩信吗?
所以本节我们只讨论发送普通文字短信
调用系统发送短信功能
就是把写好的收信人和内容发送到系统的发送短信的界面,用户验证收件人内容是否真正确再点击发送
说白了就是调用系统发短信的窗口,这样做有一定的好处:
这样发短信, APP 安装的时候就可以 少写一条发短信的权限 ,那么诸如 360 这类安全软件在安装的时候 就不会提醒用户:"这个 APP 有短信权限,可能会偷偷滴发短信喔",而用户对于偷偷发短信的行为是十分 厌恶的,当然有些人不看直接安装,而有些人可能会觉得会偷偷发短信喔,好恶心的应用,我才不装咧, 又或者直接禁止我们的 APP 发送短信,那么当我们 APP 在发送短信的时候就可能会出现一些异常,或者 应用直接崩溃等
所以如果你的应用需要发送短信进行验证或者付费这些东西的话,建议使用这种方式
public void SendSMSTo(String phoneNumber,String message) { //判断输入的 phoneNumber 是否为合法电话号码 if( PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber )) { // Uri.parse("smsto") 这里是转换为指定 Uri,固定写法 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber)); intent.putExtra("sms_body", message); startActivity(intent); } }
范例
-
创建一个 空的 Android 项目
cn.twle.android.SendSMS
-
修改
activity_main.xml
<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:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="短信要发给谁" /> <EditText android:id="@+id/ms_sms_sendto" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="短信内容" /> <EditText android:id="@+id/ms_sms_content" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" /> </LinearLayout>
-
修改
MainActivity.java
发送短信package cn.twle.android.sendsms; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.PhoneNumberUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText ms_sms_sendto; private EditText ms_sms_content; private Button btn_send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ms_sms_sendto = (EditText) findViewById(R.id.ms_sms_sendto); ms_sms_content = (EditText) findViewById(R.id.ms_sms_content); btn_send = (Button) findViewById(R.id.btn_send); btn_send.setOnClickListener(this); } public void onClick(View v) { String ms_sendto = ms_sms_sendto.getText().toString(); String ms_content = ms_sms_content.getText().toString(); //判断输入的 phoneNumber 是否为合法电话号码 if (PhoneNumberUtils.isGlobalPhoneNumber(ms_sendto)) { // Uri.parse("smsto") 这里是转换为指定 Uri,固定写法 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + ms_sendto)); intent.putExtra("sms_body", ms_content); startActivity(intent); } } }