【短信】短信模块的多平台适配

来源:互联网 发布:淘宝天猫禁止好评返现 编辑:程序博客网 时间:2024/06/07 06:05

目标:一个短信apk可以安装在多平台上。

 

适配层设计

谷歌的标准接口

frameworks/opt/telephony/src/java/android/provider目录下

Telephony.Sms; 用来保存短信到uri或收件箱,草稿箱等,是把短信保存到数据库中。

 

frameworks/opt/telephony/src/java/android/telephony目录下
SmsManager; 用于发送短信,向SIM卡写短信,删短信,读取短信,

SmsMessage; 代表一条短信,可以获取一条短信的所有的东西。

 

frameworks/base/telephony/java/android/telephony 目录下
TelephonyManager;代表了telephony服务。获取SIM卡的信息等。


展讯扩展的接口

frameworks/base/core/java/android/sim 目录下

Sim 代表一张Sim卡,获取一张卡的各种信息。

SimManager 用来管理2张卡,id,名称,颜色,iccId等。

 

MTK扩展的接口

目录没找到,但用法知道。

SimInfoManager 用来管理SIM卡信息

SimInfoRecord

SmsManagerEx 用来发送双卡短信。

 

其他双卡平台也会扩展双卡接口,但代码应该是类似的。

 

适配层的设计

我们做的适配层不是适配所有短信接口,而是针对双卡扩展的部分。而对于谷歌的标准接口,则不作适配。对于双卡部分,也不是全部扩展,而是根据需要扩展。这样适配层的代码很简单,应用的改动也很少。

HqPlatform 用于获取平台信息

init() 初始化,用来确定是不是当前编译的平台。

HqSimManager 管理SIM卡信息

GetSimCount() 获取插入的SIM卡个数

GetSimIdBySlot()

GetNameBySlot()

GetSlotBySimId()

HqSmsManager 用于操作SIM卡的短信(发送,读取,保存,删除等)

sendMultipartTextMessage() 发送

divideMessage() 拆分

HqTelephony 短信数据库操作

HqTelephony.Sms.addMessageToUri() 把短信写入数据库

 

如何编译

把适配层编译成HqAdapterMTk.jar,HqAdapterSpread等jar包。

最初的想法是,一次编译,可以安装到所有的手机上使用。实际上做不到。因为MTK和展讯扩展的接口不一样,在MTK编译环境中,调用展讯扩展的接口,编译不过。

其他厂商也无法做到只编译一次。

小米系统安装在展讯,MTK手机上,都只支持单卡,说明小米系统只支持谷歌标准接口,没有对双卡做适配。

乐蛙需要做一个适配层,这个适配层对于每个平台都不同,才可以支持双卡。适配层需要单独编译。

方法是:在MTK环境编译,编译出来的apk安装在MTK平台上可以使用双卡,安装在其他平台上,使用谷歌标准接口,只支持单卡。在展讯平台也是一样。

 

需要解决的问题

使用MTK环境下编译的apk,如果放到其他平台运行,会因为找不到一些类,而导致程序异常终止,所以需要判断当前运行的平台。

获取平台的方法:调用这个接口

SimInfoManager.getInsertedSimCount(),并catch异常,如果捕捉到java.lang.NoClassDefFoundError或ExceptionInInitializerError,则说明不是MTK平台,只能调用谷歌标准接口。

 

调试结果

MTK平台上编译出来的apk,在MTK平台上测试了没卡,单卡,双卡,均能正常收发短信。而在其他平台上,只能调用默认的那张卡来收发短信。删除,转发,重发等操作都测试通过。

展讯平台编译出来的apk,也测试通过。

 

其他模块思考

联系人和拨号盘,使用同样的方法来扩展,应该没问题。

通话模块,语音通话部分可以同样扩展。谷歌没有开发视频通话部分,而是由各个厂商自己开发的。预计需要1-2周时间评估。

设置模块,需要进一步评估。

0 0