Android-SendSMS

SmsManager

简介

       SmsManager(短信管理器)是Android提供的另一个非常常见的服务,用于管理手机短信,一般用于实现在app中发送短信的功能SmsManager提供了系列sendXxxMessage()方法用于发送短信。

使用方法

       调用SmsManager提供的短信接口sendTextMessage函数即可。

public  void  sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

       用到的参数:

  • String destinationAddress 收信人电话号码
  • String scAddress 短信中心的号码,一般用null表示默认
  • String text 短信的内容
  • PendingIntent sentIntent 短信发送状态的信息,一般用null
  • PendingIntent deliveryIntent 对方接收状态的信息,一般用null

源代码

MainActivity.java

package com.example.administrator.sendsms;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    EditText numberET,contentET;//numberEditText,contentEditText
    Button send;
    SmsManager sMananger;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取SmsManager
        sMananger = SmsManager.getDefault();

        // 获取程序界面上的两个文本框和按钮
        numberET = (EditText) findViewById(R.id.number);
        contentET = (EditText) findViewById(R.id.content);
        send = (Button) findViewById(R.id.send);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String phone = numberET.getText().toString();
                String context = contentET.getText().toString();
                ArrayList<String> list = sMananger.divideMessage(context);

                //因为一条短信有字数限制,因此要将长短信拆分
                for(String text:list)
                {
                    sMananger.sendTextMessage(phone,null,text,null,null);
                }

                Toast.makeText(getApplicationContext(),"发送完毕",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/number"
        />

    <EditText
        android:id="@+id/number"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/content"
        />

    <EditText
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:lines="2"
        />

    <Button
        android:id="@+id/send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:layout_gravity="center_horizontal"
        />

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.sendsms">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    //获取系统权限,若没有添加下面这句代码,发送短信时会闪退
    <uses-permission android:name="android.permission.SEND_SMS" />

</manifest>

strings.xml(res/values/strings.xml)

<resources>
    <string name="app_name">04-SendSMS</string>
    <string name="hello">Hello World, SendSms!</string>

    <string name="number">收件人号码:</string>
    <string name="content">短信内容:</string>
    <string name="send">发送</string>

</resources>

注意事项

关于SmsManager

       首先要通过getDefault方法获取SmsManager:

// 获取SmsManager
sMananger = SmsManager.getDefault();

       获取了SmsManager之后,调用了divideMessage方法分割长短信:

ArrayList<String> list = sMananger.divideMessage(context);

       之后调用sendTextMessage方法发送短信:

sMananger.sendTextMessage(phone,null,text,null,null);

关于String.xml

       此例中String.xml的代码如下:

<resources>
    <string name="app_name">04-SendSMS</string>
    <string name="hello">Hello World, SendSms!</string>

    <string name="number">收件人号码:</string>
    <string name="content">短信内容:</string>
    <string name="send">发送</string>

</resources>

       从xml语法的角度分析,resources拥有元素内容,因为它包含了其他元素(若干个string),而这若干个string元素除了拥有属性app_name、hello等等,又包含了文本内容。

       我们再看activity_main.xml中关于某个TextView的代码:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/number"
        />

       这个TextView的android:text属性是@string/number,意思是属性为number的一个string。也就是说,在执行activity_main.xml文件时,它会自动去资源库String.xml里寻找需要的内容。这意味着,如果按照这种方式写,当我们修改String.xml里的内容时,就可以很快改掉activity_main.xml中的内容。

关于divideMessage

       一条短信只可容纳70个中文,所以当短信长度超过70个中文字符时程序就要特殊处理了。divideMessage主要用于处理这种情况。

       有两种方式可以处理,一种是本例中用到的,用sendTextMessage方法:

if (message.length() > 70) 
{  
    ArrayList<String> msgs = sms.divideMessage(message);  

    for (String msg : msgs) 
    {  
        sms.sendTextMessage(phoneNumber, null, msg, null, null);  
    }
}  
else 
{  
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);  
}

一种是用sendMultipartTextMessage方法:

if (message.length() > 70) 
{  
    ArrayList<String> msgs = sms.divideMessage(message);  

    ArrayList<PendingIntent> sentIntents =  new ArrayList<PendingIntent>();  
    for(int i = 0;i<msgs.size();i++)
    {  
       sentIntents.add(sentPI);  
    }  

    sms.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null);

} 
else 
{  
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);  
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值