如何编写和发送安卓超长短信?

一、

在Android平台上,发送短信时如果内容超过70个中文字符(实际为67个字符),则需要进行特殊处理,这是因为一条普通短信的最大容量是70个中文字符,超过这个长度就需要使用分批发送的方法。

如何编写和发送安卓超长短信?

二、发送方式

1. 通过sendTextMessage()方法逐条发送

优点:实现简单。

缺点:用户会分条收到短信,体验不佳。

代码示例

if (message.length() > 70) {
    ArrayList<String> msgs = smsManager.divideMessage(message);
    for (String msg : msgs) {
        smsManager.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);
    }
} else {
    smsManager.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
}

2. 使用sendMultipartTextMessage()方法发送

优点:用户收到的是连在一起的一整条短信。

缺点:实现相对复杂。

代码示例

if (message.length() > 70) {
    ArrayList<String> msgs = smsManager.divideMessage(message);
    ArrayList<PendingIntent> sentIntents = new ArrayList<>();
    for (int i = 0; i < msgs.size(); i++) {
        sentIntents.add(sentPI);
    }
    smsManager.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null);
} else {
    smsManager.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
}

三、超长短信协议头详解

超长短信的发送涉及到复杂的协议头信息,以下是两种常见的协议头格式:

1. 6位协议头格式

格式:05 00 03 XX MM NN

byte 1: 05,表示剩余协议头的长度。

byte 2: 00,标识位长度为1。

byte 3: 03,剩下短信标识的长度。

byte 4: XX,这批短信的唯一标志。

byte 5: MM,这批短信的数量。

如何编写和发送安卓超长短信?

byte 6: NN,当前短信是这批短信中的第几条。

示例:05 00 03 39 02 01

2. 7位协议头格式

格式:06 08 04 XX XX MM NN

byte 1: 06,表示剩余协议头的长度。

byte 2: 08,标识位长度为2。

byte 3: 04,剩下短信标识的长度。

byte 4-5: XX XX,这批短信的唯一标志。

byte 6: MM,这批短信的数量。

byte 7: NN,当前短信是这批短信中的第几条。

示例:06 08 04 00 39 02 01

四、接收与存储机制

1. 接收机制

长短信会分割成多条发送过来,每一条头部会带上总共有多少条和这是第几条的信息,手机收到其中一条短信时,如果辨别出是长短信,则先把短信存储在raw表内(sqlite路径:/data/data/com.android.providers.telephony/databases/mms***s.db),当收完全部短信时,就把raw表的相关内容删除,传播到其他程序处理,主要在***SDispatcher.java的proces***essagePart函数中进行处理。

2. 存储机制

为了确保发送成功,还需要检查电话号码是否有效(这里仅检查非空,实际应用中可能需要更复杂的正则表达式验证)以及短信内容长度是否超过70个字符。

短信内容部分,有六个字节分别定义短信唯一标识以及该短信是第几条,所以长短信发送时每条实际为67个汉字。

如何编写和发送安卓超长短信?

1. 归纳

发送方式:主要有逐条发送和使用sendMultipartTextMessage()方法两种方式。

协议头:涉及复杂的协议头信息,包括6位和7位两种格式。

接收与存储:手机接收到长短信后会先存储在raw表中,收完全部后再进行处理。

2. 建议

用户体验:优先使用sendMultipartTextMessage()方法,以提供更好的用户体验。

错误处理:在实际开发中,应添加必要的错误处理逻辑,以应对网络问题或发送失败的情况。

性能优化:对于大量短信发送的场景,可以考虑批量发送和异步处理,以提高性能。

六、相关问题与解答

Q1: Android中超长短信的分割是如何实现的?

A1: Android中超长短信的分割是通过******anager类的divideMessage()方法来实现的,该方***根据短信的最大长度(70个中文字符或67个字符)将长短信分割成多个部分,并返回一个包含这些部分的ArrayList,开发者可以遍历这个ArrayList,逐条发送短信。

Q2: 如果需要发送的短信内容非常长,超过了普通短信的长度限制,应该如何处理?

A2: 如果需要发送的短信内容超过了普通短信的长度限制(70个中文字符或67个字符),应该使用******anager类的sendMultipartTextMessage()方法来发送,该方法允许将长短信分割成多个部分,并以多条短信的形式发送出去,但用户收到的仍然是一整条短信,在使用该方法时,需要先将长短信分割成多个部分,并为每个部分创建一个PendingIntent对象,然后将这些部分和PendingIntent对象传递给sendMultipartTextMessage()方法。

到此,以上就是小编对于“安卓超长短信”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。