一条SMS最大字符数,字符数达到多少按MMS处理
1,一条SMS最大字符数
-----------------------------------------
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
2,SMS字符数达到多少会变成MMS 在MMS中可以配置达到多少条短信就转为彩信
ComposeMessageActivity中 updateCounter(.....)方法中有判断。
if (!MmsConfig.getMultipartSmsEnabled()) {
// The provider doesn't support multi-part sms's so as soon as the user types
// an sms longer than one segment, we have to turn the message into an mms.
mWorkingMessage.setLengthRequiresMms(msgCount > 1, true);
} else {
int threshold = MmsConfig.getSmsToMmsTextThreshold(ComposeMessageActivity.this); //------ 这里定义了sms数量上限
mWorkingMessage.setLengthRequiresMms(threshold > 0 && msgCount > threshold, true);
}
MmsConfig中
public static int getSmsToMmsTextThreshold(Context context) {
int limitCount = context.getResources().getInteger(R.integer.limit_count); //先通过limit_count判断
if (limitCount != 0) {
return limitCount;
}
return mSmsToMmsTextThreshold; //如果limit_count=0,则用 mSmsToMmsTextThreshold判断
}
mSmsToMmsTextThreshold值定义
private static int mSmsToMmsTextThreshold = -1;
......
} else if ("smsToMmsTextThreshold".equalsIgnoreCase(value)) {
int maxSmstomms = context.getResources().getInteger(R.integer.config_max_smstomms);
mSmsToMmsTextThreshold = (maxSmstomms == 0) ? Integer.parseInt(text) : maxSmstomms;
}
信息中对于可以输入字符的数量并没有限制,如果不停的输入字符,数量达到上百条信息的字符数,对于内存较低的手机会出现卡顿现象。
那么我们做一个基本的限制,如40条信息的字符数作为上限
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 antoon
private static final int CH_ENCODE_MAX_LENGTH = 1340*2; //add by antoon
private static final boolean FEATURE_MMS_MESSAGE_COUNT_LIMIT=true; //add by antoon
一条SMS最大字符数,字符数达到多少按MMS处理的更多相关文章
- java:打印菱形图案(传参打印的自定义字符和行数)
打印菱形图案: 代码实现: public class Hello { public static void main(String args[]) { LingXingPrint("#&qu ...
- 字符集和字符编码(Charset & Encoding)
字符集和字符编码(Charset & Encoding)[转] 1.基础知识 计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按 ...
- 【转】字符集和字符编码(Charset & Encoding)
相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"бЇЯАзЪСЯ"."�????????"?还记得HTTP中的Accept-Charset.Accept ...
- 转:字符集和字符编码(Charset & Encoding)
转自:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创 ...
- JS 实现计算一段文字中的字节数,字母数,数字数,行数,汉字数。
看到了匹配,第一个想到了用正则表达式,哈哈,果然很方便.不过正则表达式高深莫测!我还没有研究明白啊..目前学了点皮毛.代码如下: <!DOCTYPE html PUBLIC "-//W ...
- 卡特兰数 Catalan数 ( ACM 数论 组合 )
卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1) 编辑 收藏 引用 所属分类: ACM ( 数论 ...
- catalan 数——卡特兰数(转)
Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数.悲剧啊,现在整理一下 一.Catalan数的定义令h(1) ...
- Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
/** 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游 链接:https://vjudge.net/problem/UVA ...
- (转载)Catalan数——卡特兰数
Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数.悲剧啊,现在整理一下 一.Catalan数的定义令h(1) ...
随机推荐
- requirejs的使用
requirejs的优点: 1.防止在js的加载过程中,阻止页面的渲染: 2.可以引入多个js文件: 3.可以写出重复使用的js模块: 4.有效的防止命名的冲突,通过将变量分装在模块中的方式实现: r ...
- Elasticsearch常用配置及性能参数
cluster.name: estest 集群名称node.name: “testanya” 节点名称 node.master: false 是否主节点node.data: true 是否 ...
- 使用UltraISO制作U盘启动盘——转载
现在流行用U盘来安装系统,但要用U盘来安装系统的前提条件下是如何将镜像文件写入到U盘里,UltraISO能很好的满足你的需求. 步骤/方法 鼠标右键“以管理员身份运行”UltraISO图标 打 ...
- Qt 自定义消息窗口
用于设置取消时,询问是否保存修改的DLGvoid SetWindow::cancelButton() { if( m_IsChange) { QMessageBox msgBox; msgBox.se ...
- 第十八周个人作业--The Final
项目计划 完成这个项目需要的时间:5-7天项目开发 需求分析: 作为一名排球赛事管理者,我希望能够根据比赛查询每场比赛的结果,以便于确定每支球队的比赛名次. 设计文档 由排球比赛用 ...
- 团队编程——web应用之人事管理系统
本次作业为团队作业,团队博客要求如下:1. 介绍团队情况:包括队长.成员.队名.成员照片.队训--.等:2. 介绍团队项目名称.总体任务,各成员任务等:3. 每个队做 一次需求调研(针对团队项目),要 ...
- cdnbest的站点设置里设置url跳转设置
示例: 内容示例写法: ^http://kangleweb.com/(.*)$ https://www.kangleweb.com/$1 这只是一个例子,其他用法您可以自已多试试
- 用node搭建静态文件服务器
占个坑,写个node静态文件服务器
- cookie小记
清除cookie可用下面2种的方法.注意如果要清除的cookie的域是指定的,则这里也应该指定,否则无效 1: Response.Cooki ...
- Android根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...