
虽然现在4G网络很普及了,但是我国幅员辽阔,4G信号在某些地方接收不良,手机连接很容易掉到3G甚至2G网络。为了让用户在低速环境也能使用App的基础功能,而不至于还在老牛破车地缓慢下载大图,App就得判断当前所处的网络环境,从而针对不同的网络连接提供相应的访问模式;比如在4G网络下默认完整模式,在2G/3G网络下默认切换到极简模式。
查看网络类型等信息,用到了电话管理器TelephonyManager,它的对象从系统服务TELEPHONY_SERVICE中获取,相关方法说明如下:
getNetworkOperator : 获取运营商代码。返回五位数字的字符串,前三位表示移动国家代码(Mobile Country Code,简称MCC),后两位表示移动网络代码(Mobile Network Code,简称MNC)。
getNetworkOperatorName : 获取运营商名称。如中国移动、中国联通、中国电信等等。
getPhoneType : 获取电话类型。返回1表示G,2表示CDMA,3表示SIP。
getNetworkType : 获取网络类型。这个网络类型包含每代网络的细分类型,可表示GPRS、CDMA、EvDo、HSPA、LTE等等。
getNetworkTypeName : 获取网络类型的名称。隐藏方法,需使用反射机制调用。
getNetworkClass : 获取网络分代。隐藏方法,需使用反射技术调用。返回1表示2G,返回2表示3G,返回3表示4G。
下面是查看具体手机上网络类型的截图,第一张图片为使用移动号码的网络信息,第二张图片为使用联通号码的网络信息。
下面是查看网络类型的代码例子:
标准的Android系统只支持一张sim卡,不支持一个手机同时插两张卡。可是许多人都希望手机插两张卡,一张卡用于工作,一张卡用于私人,所以双卡双待手机最早由山寨机厂商推出后,就大受国人追捧,使得国内各大厂商纷纷跟进推出双卡手机。时至今日,中国的智能手机市场,早已是双卡手机的天下,Android标准的单卡手机反而沦为少数群体了。
现在有些App的用户账号与手机是绑定的,一部手机只能注册一个账号,然而注册用户应该以手机号码做为唯一标识,像双卡手机同时插了两张卡,就应当允许注册两个账号,每个帐号都对应一个手机号码,才符合正常的处理逻辑。因此,App在用户注册帐号时,可先判断当前手机是否支持双卡,且是否两个卡槽都插了sim卡,如果用户手机找到两个手机卡,则允许这部手机按照号码分别注册两个账号。
既然广大用户存在双卡手机的需求,而且App也需要校验双卡信息,那么Android理当响应广大人民的呼声,顺势推出双卡功能才对。遗憾的是,原生的Android一直坚守单卡方案,反而是芯片厂商在底层对Android系统做了深度定制,使得采用这些芯片的手机也能支持双卡功能。因为双卡模块由各家芯片厂商自行定制,所以查询双卡信息没有统一的标准,开发者只有获得各厂商的私有查询API,然后在App中各显神通,想办法知道当前手机用的是哪套双卡方案,详细的双卡信息又是什么。
双卡方案的实现方式各有不同,市面上的Android智能手机,大多采用了高通芯片或者联发科芯片,于是双卡方案也形成了高通与联发科两大阵营。它们都提供了查询两个卡槽的imei和imsi信息,不过由于是隐藏方法,故而要通过反射机制来调用。
下面是查看具体手机上双卡信息的截图,第一张图片为使用高通方案的双卡信息,第二张图片为使用联发科方案的双卡信息。
下面是查看双卡信息的代码例子:
有话要说...