android2.2应用开发之IccCard(sim卡或USIM卡)


     如果要做android通讯录的联系人的机卡混排显示,由于手机卡类型的不同,导致手机卡存储容量以及可以存储信息不同,就要涉及到android去读Icc卡的信息。

      一般的sim卡只能存储姓名跟一个电话号码,而USIM卡还可以存多个电话号码跟邮箱,所以编辑卡上联系人的时候应该动态的去布局,或者应用可以去写死,让USIM卡的存储信息与SIM卡一致。

     由于本人是在源码上开发的,用SDK开发的朋友有些类或方法以及属性可能引用不到,这是由于用的谷歌没有公开的API导致,望大家不要莫名其妙。

      1、读取ICC卡的类型:

    由于我只需要去区分sim和USIM,所以返回的不是USIM的我都视为sim,这个大家可以根据需要自己去改。

    import android.os.SystemProperties;

    public  String getSimType(){
         if (SystemProperties.get("gsm.sim.card.type", "SIM").contentEquals ("USIM")){
             return "USIM";
         }else{
             return "SIM";
         }
    }

      2 、是否有ICC卡:

            import android.telephony.TelephonyManager;

            boolean hasIcc = ((TelephonyManager) getSystemService

                            (Context.TELEPHONY_SERVICE)).hasIccCard();

       

       3、何时导手机卡上的联系人既sim卡联系人导入的时机:

         一般大家会想到开机就导呗,接收boot_completed的消息然后启动一个service去导,那我这里告诉大家一个系统发的广播,比boot_completed时间发出的更早些。

注意:这个广播只有插入手机卡的情况下才会去播出,没有插卡式不会播出去的。

import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.TelephonyIntents;

 

[java]  view plain copy
  1.     
  2.   
  3. public void onReceive(Context con, Intent intent) {  
  4.         Log.i(TAG,"receive");  
  5.         if(intent.getAction().equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)){  
  6.             Log.i(TAG,"SIM_STATE_CHANGED"+intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE));  
  7.             if(intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE).equals(IccCard.INTENT_VALUE_ICC_LOADED)){  
  8.                   Log.i(TAG,"READY to start service");  
  9.                   Intent i = new Intent(con,SimContactsService.class);  
  10.                   i.putExtra("ICC_LOADED""READY");  
  11.                   con.startService(i);  
  12.             }  
  13.         }  
  14.    }  

 

对,这个广播即TelephonyIntents.ACTION_SIM_STATE_CHANGED,字符串是:"android.intent.action.SIM_STATE_CHANGED",系统在发这个action广播的时候会在intent里附加一个IccCard.INTENT_KEY_ICC_STATE的数据,说到这里大家应该知道IccCard会有好几种状态,具体多少大家可以去查源码,我这里当状态为IccCard.INTENT_VALUE_ICC_LOADED时表明手机卡已经装载好,可以去读手机卡的数据了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android NDK(Native Development Kit)是一个允许开发者使用C和C++语言编写Android应用程序的工具。使用NDK可以实现Android应用的部分或全部功能,特别是在性能要求较高或需要底层硬件操作的情况下。 操作USIM(Universal Subscriber Identity Module)是指通过NDK访问和控制手机SIM卡中嵌入式的智能芯片。USIM是一种具有更高性能和扩展性的SIM卡,用于存储和处理用户的个人信息、网络访问权限和加密密钥等。 Android平台上可以使用NDK来操作USIM,具体的步骤如下: 1. 首先,需要在Android源代码中增加USIM API的支持,以便NDK可以调用相关的函数和方法。 2. 编写C或C++代码来访问USIM。可以使用标准的SIM卡API(如PC/SC或ISO 7816)来与USIM进行通信,或者使用厂商提供的专门API。 3. 在代码中,我们可以调用NDK提供的函数来打开、关闭、读取和写入USIM上的数据。这些函数通过JNI(Java Native Interface)将C/C++代码与Java代码进行交互。 4. 在Java层面,可以编写对应的接口类,用于调用NDK代码。这些接口类可以封装NDK函数,提供更方便的调用方式。同时,通过权限管理和安全检查等机制,确保应用程序合法地访问和操作USIM。 5. 最后,编译和打包Android应用程序,并在设备上安装和运行。 操作USIM需要对NDK和SIM卡的相关技术和知识有一定的了解,同时还需要获取相应的访问权限和合作厂商的支持。在开发过程中,需要注意保护用户的隐私和数据安全,遵循相关法律法规和应用程序许可协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值