Android 双卡双待支持检验及SIM信息获取
本文将从应用开发者的角度分析手机是否支持双卡双待,获取如果说希望自己做出支持双卡双待的系统,本文估计就不适合你了,能力不足,还望见谅啊
好了,为了迎合大众的需要,我们还是从普通开发者角度(不需要系统源码支持)开始吧!
原装的android系统不存在双卡这个东西,所以绝大多数的手机几乎都不存在支持双卡双待。一般情况来讲,我们不需要考虑这些问题,如果,确实有那个需要考虑到双卡双待的支持
首先,我们要知道双卡双待是MTK对于android的改动
其次我们要知道TelePhonyManager是对于电话服务的实现
- private TelephonyManager Mtm;
- Mtm=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- try {
- //调用系统函数getSimStateGemini(原装android系统不支持双卡双待,所以不会有这个函数),MTK添加此函数(双卡双待中国特色)
- method_ckeckDoublePhone=TelephonyManager.class.getMethod("getSimStateGemini",new Class[]{int.class});
- //如果成功调用到此函数,则实现双卡双待
- //获得SIM卡1
- phone_result_1=method_ckeckDoublePhone.invoke(Mtm, new Object[]{Integer.valueOf(0)});
- //获得SIM卡2
- phone_result_2=method_ckeckDoublePhone.invoke(Mtm, new Object[]{Integer.valueOf(1)});
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- isDoublePhone=false;
- }catch(SecurityException e){
- e.printStackTrace();
- isDoublePhone=false;
- }catch(IllegalArgumentException e){
- e.printStackTrace();
- isDoublePhone=false;
- }catch(InvocationTargetException e){
- e.printStackTrace();
- isDoublePhone=false;
- }catch(Exception e){
- e.printStackTrace();
- isDoublePhone=false;
- }
当然,方法不止这一种。至于SIM信息获取,就请大家百度了
如果是做framework层开发发送相对就很简单了
- try{
- if(ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE)).isSimInsert(0)){
- //SIMCard1 inserted
- }
- if(ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE)).isSimInsert(1)){
- //SIMCard2 inserted
- }}catch (RemoteException ex) {
- } catch (NullPointerException ex) {
- }
或者
- if ("READY".equals(SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE))) {
- //SIMCard1 Ready
- }
- if ("READY".equals(SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE_2))) {
- //SIMCard2 Ready
- }
当然这里也给大家透露以下SIM state
- "ABSENT" //缺失
- "PIN_REQUIRED" //
- "PUK_REQUIRED"
- "NETWORK_LOCKED"
- "READY" //ready