android 判断是否有sim卡及运营商

 我来答
千锋教育
2016-03-29 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部

Android作为一个智能手机操作系统,SDK对SIM卡的读取有相关的操作,都封装在framework中

和SIM卡相关的类主要有以下几个:

  1. IccConstants  (里面记录很多的常量,主要用来存储某个字段在SIM卡上的位置是什么,比如ADN(sim卡上的电话本),6F3A,  FDN(固定拔号 6F3B))IccCardStatus(记录SIM卡的状态,如ABSENT, READY,UNKNOW,ETC)

  2. IccFileHandler(这个是用来SIM卡上的RECORD读完后,要处理什么事情)

  3. IccRecords(SIM卡上的文件内容,每一个字段,一个RECORD)

  4. IccProvider(手机上的数据库,读出来的数据全放这)

  5. IccUtils(里面一般全是静态方法,主要用来码制转换)

  6. IccSmsInterfaceManager,IccCard(这个是一个抽象类,会根据上面手机的制式,自动起一个SIMCARD 或者RUIMCARD)


以GSM为例说下读取的过程:

  1. 根据SIM卡的类型,进入SIMRecords, 开始探测SIM卡的状态,因为,有些SIM卡会设置有PIN码,如果SIM卡有PIN码的话,手机会弹出输入PIN码的框,等待用户进行解码,注意,这个时候,如果PIN码如果没有解的话,手机是不会去读SIM卡的,因为,读SIM卡时,必须通过PIN才能去读,只有一些比较特殊的字段,可以不用,比如ECC 也就是紧急呼叫号码(一般存在卡上,运营商定制的)。同时,这PIN码未解的情况,手机中SIM卡的状态也是PIN_REQURIED_BLOCK。

  2. 当解完PIN码,或是手机没有设置PIN码,这时,手机的会探测到SIM是READY的状态,手机只有检测到SIM READY,才会发出读卡的请求。

  3. 手机开始读卡第一个是IMSI(International Mobile SubscriberIdentification Number)主要用来查找运营商的网络,里面有MCC,MNC,ICCID(Integrate circuit card identity)唯一标识一个移动用户。

  4. 当低层的MODEM读到字段结果后,会有一个返回结果,由于发送读取请求时,有一个事件信息EVENT_GET_BINARY_SIZE_DONE,当有返回时,会直接交给IccFileHandler,然后由IccFileHandler转发给SIMRecords,最后进行处理该字段读完后应该执行的操作。

育知同创教育
2016-07-16 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
android 判断是否有sim卡及运营商的方法是使用TelephonyManager提供的SIM_STATE_ABSENT状态参数来实现的。
完整的实现代码如下:

TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int simState = mTelephonyManager.getSimState();
String hintMessage = "";
switch (simState) {
case TelephonyManager.SIM_STATE_UNKNOWN:
hintMessage = "Unknown"; //未知状态
break;
case TelephonyManager.SIM_STATE_ABSENT:
hintMessage = "no SIM card is available in the device"; //手机中未插入sim卡
break;
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
hintMessage = "Locked: requires the user's SIM PIN to unlock";
break;
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
hintMessage = "Locked: requires the user's SIM PUK to unlock "; //sim卡锁定,需要输入puk码解锁
break;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
hintMessage = "Locked: requries a network PIN to unlock"; //需要一个网络的pin码来解锁
break;
case TelephonyManager.SIM_STATE_READY: //sim卡准备就绪
hintMessage = "Ready";
break;
default:
break;
}
Toast.makeText(getApplicationContext(), hintMessage, Toast.LENGTH_LONG).show();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式