locked
C++ 双卡双待如何判断sim卡存在 RRS feed

  • 问题

  • 我用注册表的SN_PHONENOSIM_VALUE判断,只能判断其中一张卡。
    比如手机支持WCDMA和GSM,当WCDMA卡拔出,只用GSM卡,我用SN_PHONENOSIM_VALUE就会判断到sim卡不存在。
    我该如何判断其中任意一张卡是否存在?
    2010年3月2日 10:40

答案

  • 唉,这个论坛上的回复率好像不太高。
    我之前的回复没有验证过,是凭自己主观臆想的,现纠正,
    单卡情况下,判断是否存在SIM卡:
    BOOL IsSimExist()
    {
        HRESULT        hr = S_OK;
        HSIM        hSim = NULL;

        hr = SimInitialize(SIM_INIT_NONE, NULL, NULL, &hSim);
        if (FAILED(hr) || NULL == hSim || INVALID_HANDLE_VALUE == hSim) {
            ASSERT(FALSE);
            return FALSE;
        }

        DWORD    dwUsed = 0;
        DWORD    dwTotal = 0;

        hr = SimGetPhonebookStatus(hSim, SIM_PBSTORAGE_SIM, &dwUsed, &dwTotal);
        SimDeinitialize(hSim);       
        if (FAILED(hr)) {
            if (SIM_E_SIMNOTINSERTED == hr) {  //未插入SIM卡,会中这个ASSERT
                ASSERT(FALSE);
               return FALSE;
            }

           
           
            return FALSE;
        }

        return TRUE;
    }
     
    这个是单卡情况下的判断,我验证过,可以正确检测出是否存在SIM卡。

    对于双卡的情况下第二张SIM卡,应该是通过RIL相关的机制来检测,我目前还未找到方法,待找到方法后告知,如果Neil_xie已找到方法请告诉我一声,谢谢!
    我MSN:chuanweizou@hotmail.com
    2010年3月15日 11:54

全部回复

  • 我使用的系统是WM6.5
    2010年3月2日 10:43
  • 我用注册表的SN_PHONENOSIM_VALUE判断 ,只能判断其中一张卡。
    比如手机支持WCDMA和GSM,当WCDMA卡拔出,只用GSM卡,我用SN_PHONENOSIM_VALUE就会判断到sim卡不存在。
    我该如何判断其中任意一张卡是否存在?

      判断第一张SIM卡是否存在,可以通过SimInitialize的返回值来判断,如果为S_OK,表示SIM存在且正常,如果不为S_OK,可进一步根据返回的SIM_E的具体错误码值
      来确认SIM卡初始化失败的具体原因,其中码值SIM_E_SIMNOTINSERTED表示SIM卡还未插入到手机。

     判断第二张SIM卡是否存,可以通过RIL_Initialize来的返回值来判断,同理,如果返回S_OK表示第二张SIM卡存在且正常,如果不为S_OK和S_FALSE,可进一步根据返回值
    来确认第二张SIM卡初始化失败的原因,其中码值RIL_E_SIMNOTINSERTED表示第二张SIM卡还未插入到手机。RIL相关都是OEM特定的,需根据OEM实现来实现。
    另外,该方法我没有验证过,不一定正确。

     

    2010年3月3日 3:28
  • 感谢楼上的回答。
    这个方法我试了下不可行。
    1、SimInitialize的返回值不能作为判断依据,因为没有sim卡的情况下有时也会返回S_OK
    2、RIL_Initialize的返回值也不能作为判断依据,同样在没有sim卡情况下也会返回S_OK

    2010年3月3日 7:26
  • 难道没人知道吗?
    2010年3月11日 7:30
  • 唉,这个论坛上的回复率好像不太高。
    我之前的回复没有验证过,是凭自己主观臆想的,现纠正,
    单卡情况下,判断是否存在SIM卡:
    BOOL IsSimExist()
    {
        HRESULT        hr = S_OK;
        HSIM        hSim = NULL;

        hr = SimInitialize(SIM_INIT_NONE, NULL, NULL, &hSim);
        if (FAILED(hr) || NULL == hSim || INVALID_HANDLE_VALUE == hSim) {
            ASSERT(FALSE);
            return FALSE;
        }

        DWORD    dwUsed = 0;
        DWORD    dwTotal = 0;

        hr = SimGetPhonebookStatus(hSim, SIM_PBSTORAGE_SIM, &dwUsed, &dwTotal);
        SimDeinitialize(hSim);       
        if (FAILED(hr)) {
            if (SIM_E_SIMNOTINSERTED == hr) {  //未插入SIM卡,会中这个ASSERT
                ASSERT(FALSE);
               return FALSE;
            }

           
           
            return FALSE;
        }

        return TRUE;
    }
     
    这个是单卡情况下的判断,我验证过,可以正确检测出是否存在SIM卡。

    对于双卡的情况下第二张SIM卡,应该是通过RIL相关的机制来检测,我目前还未找到方法,待找到方法后告知,如果Neil_xie已找到方法请告诉我一声,谢谢!
    我MSN:chuanweizou@hotmail.com
    2010年3月15日 11:54