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);    
    }    
}

范例


  1. 创建一个 空的 Android 项目 cn.twle.android.SendSMS

  2. 修改 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>
    
  3. 修改 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);
            }
    
        }
    }
    

参考文档

  1. Android SmsManager 官方文档

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.