一条SMS最大字符数,字符数达到多少按MMS处理

QRD8939_210102平台短信字符数量超过20条sms就会转为MMS处理。

-----------------------------------------

android\frameworks\opt\telephony中

com.android.internal.telephony.gsm.SmsMessage
编码——>ENCODING_7BIT
/** The maximum number of payload septets per message */public static final int MAX_USER_DATA_SEPTETS = 160;  //单条信息160个字节(ASCII码对应的纯英文字符)

/** * The maximum number of payload septets per message if a user data header * is present.  This assumes the header only contains the * CONCATENATED_8_BIT_REFERENCE element. */public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153;//对于ASCII码对应的纯英文字符,长短信中每条短信的长度为153字节,7字节标记分页信息等协议

对于纯英文,1字符占用1字节所以相当于第一条160个字符第二条160-7-7=146个字符(第一条信息的协议信息也占用了第二条的长度)第三条及以上,160-7=153个字符。-----------------------------------------------------------------------
编码——>ENCODING_16BIT (处理包含中文等非ASSICC码字符的短信)
/** The maximum number of payload bytes per message */public static final int MAX_USER_DATA_BYTES = 140;//单条信息140个字节(包含中文等非ASCII码字符的信息)

/** * The maximum number of payload bytes per message if a user data header * is present.  This assumes the header only contains the * CONCATENATED_8_BIT_REFERENCE element. */public static final int MAX_USER_DATA_BYTES_WITH_HEADER = 134;//包含中文等非ASCII码字符的信息,长短信每条最大长度为140-6=134字节,6个字节用于标记分页信息

对于包含中文字符的信息,1字符占用2字节,140/2=70, 134/2=67,  6/2=3所以相当于第一条70个字符第二条70-3-3=64字符(第一条信息的分页信息也占用了第二条的长度)第三条及以上70-3=67字符。
 
参考文档: 长短信组织结构。UDH(user data header)http://wenku.baidu.com/link?url=ksdB3TkIqKdm7tASZWqmZ8BJcUDbTbVw5FDWButs8pDlEM0ZuiJ7z36Z6lQDqZBA9vI-_XE1UWBvkRzQdeCY6wfK8labQsqIkZgQAZ7sZnK

信息中对于可以输入字符的数量并没有限制,如果不停的输入字符,数量达到上百条信息的字符数,对于内存较低的手机会出现卡顿现象。 那么我们做一个基本的限制,就已40条信息的字符数作为上限(因为20条信息后就变成彩信了)
mTextEditorWatcher中增加对输入字符的数量判断
public void afterTextChanged(Editable s) {
//-----------------add by  antoon       
            if(FEATURE_MMS_MESSAGE_COUNT_LIMIT){
                int[] params=SmsMessage.calculateLength(mTextEditor.getText(), false);
                 int length = 0;
                 if(params[3]==SmsMessage.ENCODING_7BIT){
                     length = EN_ENCODE_MAX_LENGTH;
                     //modified by antoon
                 }else if(params[3] == SmsMessage.ENCODING_16BIT) {
                     //modified by antoon
                     length = CH_ENCODE_MAX_LENGTH;
                 }
                 if(mTextEditor.getText().length() > length) {
                     s = s.delete(length, s.length());
                     toast(R.string.textContentLimit);
                 }
            }
//----------------end
}
private static final int EN_ENCODE_MAX_LENGTH = 3060*2;  // add by antoonprivate static final int CH_ENCODE_MAX_LENGTH = 1340*2; //add by antoonprivate static final boolean FEATURE_MMS_MESSAGE_COUNT_LIMIT=true; //add by antoon
				
时间: 2024-08-17 09:47:37

一条SMS最大字符数,字符数达到多少按MMS处理的相关文章

读取程序字符,行数,单词的个人程序

一.需求分析: 统计程序中有的字符个数,行数以及单词数量. 思路设计: 通过对题目要求个人理解和同学的讨论,我认为通过对行,字符和词数分别用函数统计: 行数的统计我用了:int isrand(char c, int &randnum). 对单词的统计我用了这个函数:int isWord(char c, int &wordnum).单个字母和由多个字母组成的默认为都是单词. 对字符的统计运用了这个函数:int ischaracter(char c).字符统计时两个单词之间的空格,括弧,等号等

EditText字符限制-字节数限制-一次截取超过限制部分

EditText字符限制-字节数限制-一次截取超过限制部分 一.需求描述: 转载请注明出处:http://www.cnblogs.com/wangqx/p/6096272.html 对EditText字符个数限制,当用户输入字符串超长度过指定值时,不允许输入,并给出提示. 二.实现描述: 看了网上关于EditText字符串限制的一些例子,但都过于简单,不是想要的,故自己实现了下. 和网上例子功能对比: 1.此demo是对字符字节数的限制,无需区分是中文还是英文,相比对字符个数的限制, 对字节数限

java:打印菱形图案(传参打印的自定义字符和行数)

打印菱形图案: 代码实现: public class Hello { public static void main(String args[]) { LingXingPrint("#", 7); } public static void LingXingPrint(String i, int num) { /** * 打印菱形,传参:i 为打印的字符,num为行数 . * 思路:将菱形分为上三角和下三角,上三角:每一行空格打印数为总行数-行号:每一行字符打印个数为2*行号-1;下三角

12.30 字符集和字符编码(Charset & Encoding)(转载)

——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-Language等消息头字段?这些就是接下来我们要探讨的. 目录: 1.基础知识 2.常用字符集和字符编码 2.1. ASCII字符

字符集和字符编码(Charset & Encoding)

相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-Language等消息头字段?这些就是接下来我们要探讨的. 目录: 1.基础知识 2.常用字符集和字符编码 2.1. ASCII字符集&编码 2.2. GBXXXX字符集&编码 2.3. BI

转:字符集和字符编码(Charset & Encoding)

转自:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-L

字符集和字符编码

1. 概述 现在的编程语言对字符串的处理一般封装比较好,所以平时编写代码,很少要自己考虑字符编码问题.以前学习xml时,由于xml的存储涉及到编码格式,查过一些资料,知道一些概念,GB2312.Unicode.Utf-8.Utf-16.UCS-2等,但这些概念之间什么关系,仍然一知半解.最近要做国际化,需要把不支持Unicode的程序升级为Unicode,借着这个机会,把其中的知识梳理了一遍,对字符编码的理解算更系统化了,在此总结一下. 2. 字符集和字符编码 首先明确两个概念,"字符集&quo

Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数

要求:统计一个文件中的英文,中文,数字,其他字符以及字符总数(此随笔以txt文件为例) import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; /** * 将一个文件中英文,中文,数字,其

volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

 1.volatile:要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. #include <stdio.h> #include <stdlib.h> #include <time.h> void main() { time_t start, end; double res = 0; time(&start);  //获取时间,传递给start //volatile强制每次从内存读取 volatile int i; for (i =