双SIM卡,Android监听SIM卡状态

来源:互联网 发布:java权限管理框架源码 编辑:程序博客网 时间:2024/05/18 23:28

最近在搞一个项目,其中有一块关于双SIM卡状态监听,在这一块上没有经验,在网上找了很多例子,但都是只是监听SIM卡改变状态,而我要的是不但要监听SIM状态改变,而且还要知道具体是哪张SIM卡状态改变,度娘找寻好久后,还是没有结果,于是便自行来研究下。

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

当receiver收到这个action广播时:

@Overridepublic 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中可以发现有这些状态:

通过这个方法就可以将卡槽与广播进行相对应起来,这样就能区做我们想要做的事情了。刚开始写博客,写的有点乱,勿怪勿怪!

0 0
原创粉丝点击