600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 读取SIM卡的状态 sim卡网络

读取SIM卡的状态 sim卡网络

时间:2024-07-01 12:17:10

相关推荐

读取SIM卡的状态 sim卡网络

转:/forum.php?mod=viewthread&tid=12768&fromuid=3402

最近要用到读取联系人的功能,那么联系人保存在两个地方,一个是SIM卡,就是我们的手机卡;另一个就是手机本地数据库中保存的联系人信息。大家可以拿出自己的手机,选定某一个联系人,点击功能菜单,你会发现有一个选项是同步到SIM卡或者手机,这样就是说:你可以把联系人只保存在SIM卡上,或者只保存在手机本地数据库中,但是这样,当你的手机没电了,你想把卡放在别人手机上的时候,你的电话号码就很会没有你原来手机本地保存的那些联系人。你当然可以同时保存在SIM卡上和手机本地数据库中。

OK,由此引申出两个重要的地方,第一:如何读取SIM卡的状态,如果读写SIM卡;第二:如何读写手机本地数据库中的联系人数据。我想,这是很基础的功能,任何一个人都要掌握的。我们在模拟器上可以添加联系人,但是请务必注意,这只是保存在手机本地数据库中的联系人,模拟器上是没有SIM卡的,因此,如果要读写SIM卡,就要用真机测试,但是苦于我有一个诺基亚的智能手机了,我又不舍得再买一个Android的手机做测试,因为最便宜的都得一千多,没办法,关于SIM卡的,我没办法测试。我只对手机本地数据库中的联系人做了测试。

好了,我们回到正题。第一步,学会判断SIM卡的状态及其它的信息。可以参看示例代码。

TelephonyManager的应用[取得SIM卡的状态]

手机的最主要功用就是打电话,如果没有电信公司提供的SIM卡,就不能正常地拨打电话,那么,我们有什么方法可以取得SIM卡的状态及相关资料呢?

Android API中的TelephonyManager(Android.telephony.TelephonyManager)对象,提供了几个方法可以快速取得SIM卡的状态及相关信息。

程序中以getSystemService(TELEPHONY_SERVICE)来取得TelephonyManager对象,以TelephonyManager提供的方法来取得SIM卡状态及相关信息,将取得的信息存入自定义的MyAdapter中,最后以setListAdapter()将MyAdpter内的信息显示于ListView中。自定义的Adapter对象,以row_layout.xml作为Layout,程序中依照Layout的设置值来显示信息名称及信息内容。

AndroidManifest.xml

AndroidManifest.xml本身必须要在Activity里设置读取电话状态的权限(Android.permission.READ_ PHONE_STATE)。

在取得SIM卡的相关信息时,有时会因某些情况而取不到值。例如,手机没有插入SIM卡,这时候的返回值可能为null或空白字符串,所以在程序中添加空白与null的检查会是比较保险的做法,以免因此造成系统错误。

程序以TelephonyManager.getSimState()来取得SIM卡的状态,可能出现的返回状态如表

效果图:

Android 获取sim卡运营商信息

TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE); TelephonyManager 的使用 TelephonyManager 提供设备上获取通讯服务信息的入口,应用程序使用这个类的方法来获取电话的服务商或者状态。程序也可以注册一个监听器来监听电话状态的改变。不需要直接实例化这个类,使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。

注意:一些电话信息需要相应的权限。方法无效

getSimOperatorName() Returns the Service Provider Name (SPN). // 获取服务提供商名字,比如电信,联通,移动用下面的方法。

第一种方法: 获取手机的IMSI码,并判断是中国移动\中国联通\中国电信

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

/** 获取SIM卡的IMSI码 * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志, * 储存在SIM卡中,可用于区别移动用户的有效信息。

IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成, * 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成, * 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;

MSIN为移动客户识别码,采用等长11位数字构成。 *

唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可 */

String imsi = telManager.getSubscriberId();

if(imsi!=null){ if(imsi.startsWith(“46000″) || imsi.startsWith(“46002″))

{//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号 //中国移动

}else if(imsi.startsWith(“46001″)){

//中国联通

}else if(imsi.startsWith(“46003″)){

//中国电信

} }

第二种方法

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String operator = telManager.getSimOperator();

if(operator!=null){ if(operator.equals(“46000″) || operator.equals(“46002″)|| operator.equals(“46007″)){

//中国移动

}else if(operator.equals(“46001″)){

//中国联通

}else if(operator.equals(“46003″)){

//中国电信

} }

在文件AndroidManifest.xml中添加权限其他方法具体使用方法请查看API 文档TelephonyManager中方法说明。

在文件 AndroidManifest.xml 中添加权限 <uses-permission android:name= "android.permission.READ_PHONE_STATE"/>

TelephonyManager tel = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);

String simOperator = tel.getSimOperator();

IMSI共有15位,其结构如下: MCC+MNC+MIN MCC:Mobile Country Code,移动国家码,共3位,中国为460; MNC:Mobile Network Code,移动网络码,共2位,电信03,移动02,联通GSM 01,一个典型的IMSI号码为460030912121001; MIN共有10位,其结构如下: 09+M0M1M2M3+ABCD 其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.

功能 说明

getCellLocation() 返回的单元格位置的装置 ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION

getDeviceId() 返回的IMEI / MEID的设备。 如果该设备是GSM设备然后IMEI号将被退回,如果该设备是一个CDMA设备然后MEID 将被退回 READ_PHONE_STATE

getLine1Number() 返回设备的电话号码(MSISDN号码) READ_PHONE_STATE

getNetworkOperatorName() 返回注册的网络运营商的名字

getNetworkOperator() 返回的MCC +跨国公司的注册网络运营商

getNetworkCountryIso() 返回注册的网络运营商的国家代码

getSimCountryIso() 返回SIM卡运营商的国家代码 READ_PHONE_STATE

getSimOperator() 返回SIM卡运营商的单个核细胞数+冶 READ_PHONE_STATE

getSimOperatorName() 返回SIM卡运营商的名字 READ_PHONE_STATE

getSimSerialNumber() 返回SIM卡的序列号 READ_PHONE_STATE

getNetworkType() 返回网络设备可用的类型。 这将是下列其中一个值:

WORK_TYPE_UNKNOWN WORK_TYPE_GPRS WORK_TYPE_EDGE WORK_TYPE_UMTS READ_PHONE_STATE getPhoneType() 返回设备的类型。 这将是以下值之一: TelephonyManager.PHONE_TYPE_NONE TelephonyManager.PHONE_TYPE_GSM TelephonyManager.PHONE_TYPE_CDMA READ_PHONE_STATE getSubscriberId() 返回用户识别码(的IMSI)的设备 READ_PHONE_STATE

getNeighboringCellInfo() 返回NeighboringCellInfo类代表名单相邻小区的信息,如果可用,否则将返回null ACCESS_COARSE_UPDATES

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。