androidsim读取
A. 如何在Android开发中获取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() 返回网络设备可用的类型。 这将是 下列其中一个值:
TelephonyManager.NETWORK_TYPE_UNKNOWN TelephonyManager.NETWORK_TYPE_GPRS TelephonyManager.NETWORK_TYPE_EDGE TelephonyManager.NETWORK_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
B. android如何读取双卡双待手机SIM卡信息
点击设置里,进入双卡和移动网络,点击一卡或二卡,里面有个启动点击启动,下面有运营商网络设置,选取运营商,选择移动或联通,电信就可以了就可以获得SIM卡信息了。
C. android怎么实现读取sim卡和手机内的联系人
private static final int NAME_COLUMN = 0;
2
3 private static final int NUMBER_COLUMN = 1;
4
5 private static final String SURI = "content://icc/adn";
6
7 private Context context = null;
8
9 private ContentResolver resolver = null;
10
11 private TelephonyManager telMgr = null;
12
13 public SimHelper(Context context)
14 {
15 this.context = context;
16 resolver = context.getContentResolver();
17 }
18
19 public TelephonyManager getTelephonyManager()
20 {
21 if (telMgr == null)
22 {
23 telMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
24 }
25 return telMgr;
26 }
27
28 public int getSimCardState()
29 {
30 return getTelephonyManager().getSimState();
31 }
32
33 public List<ContactInfo> retrieveContactInfoFromSIM()
34 {
35 List<ContactInfo> simContactInfoList = new ArrayList<ContactInfo>();
36 Uri uri = Uri.parse(SURI);
37 Cursor cursor = resolver.query(uri, null, null, null, null);
38 for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
39 {
40 ContactInfo contacInfo = new ContactInfo();
41 final NamePhoneTypePair namePhoneTypePair = new NamePhoneTypePair(
42 cursor.getString(NAME_COLUMN));
43 final String name = namePhoneTypePair.name;
44 final int phoneType = namePhoneTypePair.phoneType;
45 final String phoneNumber = cursor.getString(NUMBER_COLUMN);
46 setPhoneInfo(contacInfo, phoneType, phoneNumber);
47 contacInfo.setName(name);
48 simContactInfoList.add(contacInfo);
49 }
50 cursor.close();
51
52 return simContactInfoList;
53 }
54
55 private void setPhoneInfo(ContactInfo contactInfo, int phoneType,
56 String phoneNumber)
57 {
58 Phone phone = new Phone();
59 phone.setType(PhoneType.valueOf(phoneType));
60 phone.setNumber(phoneNumber);
61 contactInfo.getPhones().add(phone);
62 }
63
64 private static class NamePhoneTypePair
65 {
66 final String name;
67
68 final int phoneType;
69
70 public NamePhoneTypePair(String nameWithPhoneType)
71 {
72 // Look for /W /H /M or /O at the end of the name signifying the type
73 int nameLen = nameWithPhoneType.length();
74 if (nameLen - 2 >= 0
75 && nameWithPhoneType.charAt(nameLen - 2) == '/')
76 {
77 char c = Character.toUpperCase(nameWithPhoneType.charAt(nameLen - 1));
78 if (c == 'W')
79 {
80 phoneType = PhoneType.Company.getPhoneType();
81 }
82 else if (c == 'M' || c == 'O')
83 {
84 phoneType = PhoneType.Mobile.getPhoneType();
85 }
86 else if (c == 'H')
87 {
88 phoneType = PhoneType.Home.getPhoneType();
89 }
90 else
91 {
92 phoneType = PhoneType.Other.getPhoneType();
93 }
94 name = nameWithPhoneType.substring(0, nameLen - 2);
95 }
96 else
97 {
98 phoneType = PhoneType.Other.getPhoneType();
99 name = nameWithPhoneType;
100 }
101 }
102 }
D. 安卓手机无法识别SIM卡怎么办
若使用vivo手机,手机不识别SIM卡可参考以下处理方法:
1、您重启手机,手机会重新读取SIM卡,查看是否恢复使用。
2、检查手机设置,查看是否启用SIM卡
进入手机设置--移动网络--SIM卡信息与设置--点击进入对应SIM卡–启用SIM卡,确保开关处于开启状态。
3、检查SIM卡是否装反
请参考使用手册中的装卡步骤,查看SIM卡装入方向是否正确。
*装卡步骤查看:进入设置--系统管理--客户服务--使用手册--手机概览与快速入门–安装与准备
4、检查SIM卡外观是否良好
观察SIM卡金属表面是否存在污渍,清理SIM卡表面污渍,避免接触不良导致SIM卡无法识别。如果使用裁剪的SIM卡,SIM卡形状可能不标准,从而产生接触不良导致SIM卡无法识别,建议前往运营商营业厅更换为标准SIM卡。
5、进行交叉验证
请将SIM卡安装到其他设备,或者将其他SIM卡安装到您的手机对比测试,判断是否属于SIM卡故障。
6、服务中心检测
若以上方法未能解决您的问题,提前备份好手机数据,携带手机和购机凭证前往vivo客户服务中心检测,关注微信公众号“vivo”或者“vivo客户服务”进行查询服务中心地址电话,建议去之前电话联系,确保有工作人员接待再过去,避免耽误宝贵时间白跑一趟。
E. android重新获取sim卡
具体方法如下:
主要功能代码如下:
041/*** 获取SIM卡运营商** @param context* @return*/public static String getOperators(Context context) {TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String operator = null;String IMSI = tm.getSubscriberId();if (IMSI == null || IMSI.equals("")) {return operator;}if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {operator = "中国移动";} else if (IMSI.startsWith("46001")) {operator = "中国联通";} else if (IMSI.startsWith("46003")) {operator = "中国电信";}return operator;}/*** 手机型号** @return*/public static String getPhoneModel() {return android.os.Build.MODEL;}/*** 系统版本** @return*/public static String getSystemVersion() {return android.os.Build.VERSION.RELEASE;}
权限代码如下:
1<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
希望本文所述对大家的Android程序设计有所帮助
您可能感兴趣的文章:
Android4.X中SIM卡信息初始化过程详解
Android获取手机通讯录、sim卡联系人及调用拨号界面方法
android监控sim卡有没有服务示例(sim卡管理)
Android读取用户号码,手机串号,SIM卡序列号的实现代码
Android 判断SIM卡属于哪个移动运营商的实现代码
Android8.1 源码修改之插入SIM卡默认启用Volte功能
F. 安卓手机无法识别SIM卡也不能上网怎么办
若使用vivo手机,手机不识别SIM卡可参考以下处理方法:
1、您重启手机,手机会重新读取SIM卡,查看是否恢复使用。
2、检查手机设置,查看是否启用SIM卡
进入手机设置--移动网络--SIM卡信息与设置--点击进入对应SIM卡–启用SIM卡,确保开关处于开启状态。
3、检查SIM卡是否装反
请参考使用手册中的装卡步骤,查看SIM卡装入方向是否正确。
*装卡步骤查看:进入设置--系统管理--客户服务--使用手册--手机概览与快速入门–安装与准备
4、检查SIM卡外观是否良好
观察SIM卡金属表面是否存在污渍,清理SIM卡表面污渍,避免接触不良导致SIM卡无法识别。如果使用裁剪的SIM卡,SIM卡形状可能不标准,从而产生接触不良导致SIM卡无法识别,建议前往运营商营业厅更换为标准SIM卡。
5、进行交叉验证
请将SIM卡安装到其他设备,或者将其他SIM卡安装到您的手机对比测试,判断是否属于SIM卡故障。
6、服务中心检测
若以上方法未能解决您的问题,提前备份好手机数据,携带手机和购机凭证前往vivo客户服务中心检测,关注微信公众号“vivo”或者“vivo客户服务”进行查询服务中心地址电话,建议去之前电话联系,确保有工作人员接待再过去,避免耽误宝贵时间白跑一趟。
G. 安卓智能手机sim卡不读取,换到其他手上能用。手机什么问题都没有,就是不读SIM卡了。求帮助
如您的手机无法读卡或检测不到SIM卡可能有以下几种情况:
一、手机卡与手机的金属触点接触不充分。
二、手机卡损坏。
三、所在位置是否为信号盲区或突然没信号。
四、您可将卡尝试放在其它手机进行试试,通过换卡和换机的方法来判断是卡的问题、还是手机的问题。
H. android 无效sim卡可以读出imsi imei吗
不可以。
1、实际上android也是通过读取卡片相关数据获取的,因此卡内存储的数据是最准确的,无效的卡是没有任何数据的。
2、Android是唯一读出IMSI和IMEI的方法。
I. android 怎么读取sim卡联系人
如需显示SIM卡上的联系人,请操作:联系人-右上角更多-设置-要显示的联系人-选择SIM卡即可。