监听SIM卡是否可用

import android.app.Service;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.TelephonyManager;

/*

* 监听sim状态改变的广播,返回sim卡的状态, 有效或者无效。

* 双卡中只要有一张卡的状态有效即返回状态为有效,两张卡都无效则返回无效。

*/

public class SimStateReceive extends BroadcastReceiver {

private final static String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";

private final static int SIM_VALID = 0;

private final static int SIM_INVALID = 1;

private int simState = SIM_INVALID;

public int getSimState() {

return simState;

}

@Override

public void onReceive(Context context, Intent intent) {

System.out.println("sim state changed");

if (intent.getAction().equals(ACTION_SIM_STATE_CHANGED)) {

TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);

int state = tm.getSimState();

switch (state) {

case TelephonyManager.SIM_STATE_READY :

simState = SIM_VALID;

break;

case TelephonyManager.SIM_STATE_UNKNOWN :

case TelephonyManager.SIM_STATE_ABSENT :

case TelephonyManager.SIM_STATE_PIN_REQUIRED :

case TelephonyManager.SIM_STATE_PUK_REQUIRED :

case TelephonyManager.SIM_STATE_NETWORK_LOCKED :

default:

simState = SIM_INVALID;

break;

}

}

}

}

双SIM卡,监听状态

SIM卡状态改变的action是android.intent.action.SIM_STATE_CHANGED,需要在Manifest.xml进行注册。

@Override

public void onReceive(Context context, Intent intent) {

super.onReceive(context, intent);

final String action = intent.getAction();

Log.i(TAG,"++++++Action:"+action);

if("android.intent.action.SIM_STATE_CHANGED".equals(action)){

Log.d(TAG,"###############start");

setSimInfoByChange(context,intent);

}

}

private void setSimInfoByChange(Context context,Intent intent){

//subid 卡ID

int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID);

//soltId 卡槽ID 0:卡槽一 1:卡槽二

int soltId = intent.getIntExtra("slot",SOLTID);

Log.d(TAG, " #######subId:"+subId);

Bundle mBundle = intent.getExtras();//从中可以看到intent的发送过来的数据

Log.d(TAG, " #######mBundle:"+mBundle.toString());

String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);

if (stateExtra!=null) {

if (stateExtra.equals("ABSENT")) { //卡拔出状态

SIM_STATE = 1;

SimInfo = context.getString(R.string.cell_broadcast_widget_no_sim_card, "No SIM Cards");

} else if (stateExtra.equals("READY") || //卡正常状态 即可以读出卡信息

stateExtra.equals("IMSI") ||

stateExtra.equals("LOADED") ){

SIM_STATE = 0;

}else if(stateExtra.equals("LOCKED") || //卡被锁状态

stateExtra.equals("NOT_READY") ||

stateExtra.equals("PIN")||

stateExtra.equals("PUK")){

SIM_STATE = 2;

SimInfo = context.getString(R.string.cell_broadcast_widget_no_service,"No Services");

}

}

Log.d(TAG, " #######stateExtra:"+stateExtra+"+++++SimInfo:"+SimInfo);

Log.d(TAG, " #######soltId:"+soltId);

}

通过这个intent可以找到相应的SIM及卡槽信息,同时

String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);

这个方法可以获取SIM卡改变的状态情况,在icccardconstants的API中可以发现有这些状态:

com.android.Internal.telephony.IccCard

type

name

value

protected static final int

EVENT_ICC_LOCKED_OR_ABSENT

1

protected static final int

EVENT_ICC_READY

6

protected static final int

EVENT_RADIO_OFF_OR_NOT_AVALIABLE

3

public static final java.lang.String

INTENT_KEY_ICC_STATE

"ss"

public static final java.lang.String

INTENT_KEY_LOCKED_REASON

"reason"

public static final java.lang.String

INTENT_VALUE_ABSENT_ON_PERM_DIASBLED

"PERM_DISABLED"

public static final java.lang.String

INTENT_VALUE_ICC_ABSENT

"ABSENT"

public static final java.lang.String

INTENT_VALUE_ICC_IMSI

"IMSI"

public static final java.lang.String

INTENT_VALUE_ICC_LOADED

"LOADED"

public static final java.lang.String

INTENT_VALUE_ICC_LOCKED

"LOCKED"

public static final java.lang.String

INTENT_VALUE_ICC_NOT_READY

"NOT_READY"

public static final java.lang.String

INTENT_VALUE_ICC_READY

"READY"

public static final java.lang.String

INTENT_VALUE_LOCKED_NETWORK

"NETWORK"

public static final java.lang.String

INTENT_VALUE_LOCKED_ON_PIN

"PIN"

public static final java.lang.String

INTENT_VALUE_LOCKED_ON_PUK

"PUK"

android sim卡插拔广播,Android监听SIM卡插拔的方式相关推荐

  1. android手机解锁成功后的广播,android屏幕加解锁事件广播的监听

    想在程序中监听屏幕SCREEN_ON和SCREEN_OFF这两个action,实现屏幕锁定状态的监听,从而实现自己的相应功能.比较奇怪的是这两个action只能通过代码的形式注册才能被监听到,在And ...

  2. android P监听SD卡热插拔执行symlink软链接的实现

    收到个android P项目的需求,要求监听SD卡hotplug热插拔,执行symlink软链接和unlink. 先看下运行效果: 拔SD卡时打印: ja310_evb:/ # logcat |gre ...

  3. 双SIM卡,Android监听SIM卡状态

    最近在搞一个项目,其中有一块关于双SIM卡状态监听,在这一块上没有经验,在网上找了很多例子,但都是只是监听SIM卡改变状态,而我要的是不但要监听SIM状态改变,而且还要知道具体是哪张SIM卡状态改变, ...

  4. android监听卡1电话,Android 监听 SIM 卡状态

    判断是否包含 SIM 卡 /** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard(Context context) { ...

  5. android sim卡状态改变广播,android监控SIM卡状态的广播示例代码

    /* 监听sim状态改变的广播,返回sim卡的状态, 有效或者无效. 双卡中只要有一张卡的状态有效即返回状态为有效,两张卡都无效则返回无效. */ import android.app.Service ...

  6. Android 监听SD卡插入与拔出

    Android 监听SD卡插入与拔出 简单记录一下Android 如何监听SD卡插入与拔出,注意事项: 继承广播: public class SdStatusReceiver extends Broa ...

  7. android中对sim卡联系人的增删改查以及监听sim卡联系数据的改变

    sim卡联系人的增删改查主要是通过ContentProvider来进行操作的,在android中对sim卡联系人操作的provider是定义在IccProvider.java这个类中的,这个类位于an ...

  8. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )

    文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...

  9. 安卓监听手机USB接口拔插警报广播

    安卓监听手机USB接口拔插警报广播 很多场景我们都是需要监听手机拔插,手机都会自带一个广播去监听,我们手机充电,手机接入电脑的时候,一般都会有个小小的震动.在商场上,人多混杂,手机插在USB上,一旦有 ...

最新文章

  1. python快速入门 pdf-Python快速入门PDF高清完整版本下载
  2. 1707: [Usaco2007 Nov]tanning分配防晒霜
  3. 剑指offer-翻转单词顺序列
  4. PWN-PRACTICE-CTFSHOW-5
  5. mosquitto源码分析(六)
  6. python 装饰器应用
  7. Java毕业设计-个性影片/电影推荐系统
  8. M个苹果放在N个盘子里,有多少种不同的放法
  9. 本人累计多年整理的所有软件 需要请留言 适合毕业设计参考
  10. 转:如何做好团队复盘?3大阶段、9个步骤
  11. redis基本命令和help使用
  12. BIT-Vehicle Dataset - 车辆车型识别数据集
  13. Sony Ericsson W550c
  14. linux下Ubuntu交叉编译boost源码编译
  15. 聚商汇WMS:开源仓库管理系统
  16. 基于 JavaFX 开发的聊天客户端 OIM-即时通讯
  17. RabbitMQ与Erlang版本对应关系
  18. csp2021-09-4 收集卡牌
  19. abort()函数使用
  20. 歌唱大赛选手成绩计算

热门文章

  1. java 网上商城系统_基于Java_web开发的网上商城系统(含源文件).doc
  2. 【Python任务导向】计算机之间的通信(网络编程、UDP、TCP)
  3. 多元业务场景+广告场景,猫眼聚合SDK助出行APP实现增收!
  4. strange final examnation and some disappointments
  5. goland 未知文件打不开,删除“未知文件”默认关联类型:
  6. 看板-项目的有效管理
  7. 《上帝掷骰子吗》《时间的形状:相对论史话》读后感
  8. 视联网拓展乡村振兴新思路
  9. mysql主从同步因字段类型不一致导致主从失败
  10. Python mini-web框架框架开发01