当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发之SendSMS短信管理器实现教程

Android开发之SendSMS短信管理器实现教程

2019年04月18日  | 移动技术网IT编程  | 我要评论

mt6517t,imanke,百发百中造句

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 list = smananger.pidemessage(context);

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

                toast.maketext(getapplicationcontext(),"发送完毕",toast.length_short).show();
            }
        });
    }
}

activity_main.xml




    

    

    

    

androidmanifest.xml




    
        
            
                

                
            
        
    

    //获取系统权限,若没有添加下面这句代码,发送短信时会闪退
    

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


    04-sendsms
    hello world, sendsms!

    收件人号码:
    短信内容:
    发送


注意事项

关于smsmanager

首先要通过getdefault方法获取smsmanager:

// 获取smsmanager
smananger = smsmanager.getdefault();

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

arraylist list = smananger.pidemessage(context);

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

smananger.sendtextmessage(phone,null,text,null,null);

关于string.xml

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


    04-sendsms
    hello world, sendsms!

    收件人号码:
    短信内容:
    发送


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

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

    

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

关于pidemessage

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

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

if (message.length() > 70) 
{  
    arraylist msgs = sms.pidemessage(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 msgs = sms.pidemessage(message);  

    arraylist sentintents =  new arraylist();  
    for(int i = 0;i
        
   

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网