当前位置: 代码迷 >> 移动应用 >> 老有关问题如何获取本机手机号
  详细解决方案

老有关问题如何获取本机手机号

热度:6566   发布时间:2013-02-26 00:00:00.0
老问题怎么获取本机手机号
移动的用白名单


那么电信和联通的了?


访问wap页面
header里面取??

------解决方案--------------------------------------------------------
C/C++ code
/*******************************************************************************************函数名称: TEL_GetCnum描    述: 取得本机号码(MSISDN)。存储容量取决于SIM卡,但每个SIM卡应该只使用一个号码,            所以此外只取第一个本机号码,通过AT+CPBR=?查询到可以记录两条输入参数: wzNumber:电话号码缓冲区, wzName:姓名缓冲区输出参数: 电话号码和姓名返    回: TRUE: 成功   FALSE: 失败N O T E : 取得本机号命令为AT+CNUM,返回值如下格式:            +CNUM: "004000520087007A004B0054005F007600E8006D","13145939103",129            因为AT+CNUM不支持中文,所以改为AT+CPBR命令查询********************************************************************************************/BOOL CGsmModel::TEL_GetCnum(WCHAR *wzNumber, WCHAR *wzName){//+CPBR: 1,"13145939103",129,"0054006500730074002000530049004D"    char szStorage[16] = {0};    if(!TEL_GetPhoneBookStorage(szStorage))//查询当前的存储单元        return FALSE;    if(strcmp(szStorage,"ON"))//如果不是本机号码的存储单元    {        if(!TEL_SetPhoneBookStorage("ON"))//设置到本机号码的电话簿存储单元            return FALSE;    }    BOOL bRet = TEL_ReadPhoneBook(1,wzNumber,wzName);//取得本机号码    if(strcmp(szStorage,"ON"))//如果不是本机号码的存储单元    {        while(!TEL_SetPhoneBookStorage(szStorage))//恢复为原来的电话簿存储单元            Sleep(0);    }    return bRet;}/*******************************************************************************************函数名称: TEL_GetPhoneBookStorage描    述: 取得当前的电话簿存储单元类型输入参数: 存储电话簿存储单元名称的缓冲区输出参数: 电话簿存储单元名称            "ON" SIM卡(或ME)中的号码(MSISDN)清单(也可以使用+CNUM命令读出该存储器中的信息)                    $(AT R97)$ "FD" SIM固定拨号号码电话簿(此功能开启及存储容量取决于SIM卡)             "DC" ME最近拨号号码电话簿(非标准的)             "RC" ME最近接听号码电话簿(非标准的)             "MC" ME最近未接号码电话簿(非标准的)             "MT" ME电话簿和缩位拨号电话簿的合并(非标准的)包括ME和SIM电话簿                    (存储容量取决于SIM卡,事实上,EM310不存在ME电话簿)             "EN" 紧急呼叫号码电话簿(此功能开启及存储容量取决于SIM卡)             "BD" 被禁止的拨号号码电话簿(此功能开启及存储容量取决于SIM卡)             "SD" 服务拨号号码电话簿(此功能开启及存储容量取决于SIM卡) 返    回: TRUE: 成功   FALSE: 失败N O T E : 缓冲区请先清零,再传入********************************************************************************************/BOOL CGsmModel::TEL_GetPhoneBookStorage(char *szStorage){//+CPBS: "MT",3,250    if(SendATCmd("AT+CPBS?\r\n"))    {        char *szBegin = strstr(m_strRespBuf, "CPBS");//移到CPBS        if(!szBegin) return FALSE;        szBegin = strchr(szBegin,'"');        if(!szBegin) return FALSE;        szBegin++;//移过引号        char *szEnd = strchr(szBegin,'"');        if(!szEnd) return FALSE;                strncpy(szStorage,szBegin,szEnd-szBegin);        return TRUE;    }    return FALSE;}/*******************************************************************************************函数名称: TEL_SetPhoneBookStorage描    述: 设置当前的电话簿存储单元输入参数: 电话簿存储单元名称            "ON" SIM卡(或ME)中的号码(MSISDN)清单(也可以使用+CNUM命令读出该存储器中的信息)                    $(AT R97)$ "FD" SIM固定拨号号码电话簿(此功能开启及存储容量取决于SIM卡)             "DC" ME最近拨号号码电话簿(非标准的)             "RC" ME最近接听号码电话簿(非标准的)             "MC" ME最近未接号码电话簿(非标准的)             "MT" ME电话簿和缩位拨号电话簿的合并(非标准的)包括ME和SIM电话簿                    (存储容量取决于SIM卡,事实上,EM310不存在ME电话簿)             "EN" 紧急呼叫号码电话簿(此功能开启及存储容量取决于SIM卡)             "BD" 被禁止的拨号号码电话簿(此功能开启及存储容量取决于SIM卡)             "SD" 服务拨号号码电话簿(此功能开启及存储容量取决于SIM卡) 输出参数: 返    回: TRUE: 成功   FALSE: 失败N O T E : 传入参数不能带双引号,本函数会自动添加双引号********************************************************************************************/BOOL CGsmModel::TEL_SetPhoneBookStorage(char *szStorage){    char szCmd[MAX_PATH] = {0};    sprintf(szCmd,"AT+CPBS=\"%s\"\r\n",szStorage);    return SendATCmd(szCmd);}/*******************************************************************************************函数名称: TEL_ReadPhoneBook描    述: 读取指定位置的电话号码记录输入参数: 电话号码的索引位置(SIM卡最多只支持250条记录,ME最多只支持200条记录。),            电话号码缓冲区以及姓名缓冲区输出参数: 电话号码和姓名返    回: TRUE: 成功   FALSE: 失败********************************************************************************************/BOOL CGsmModel::TEL_ReadPhoneBook(UINT index, WCHAR *wzNumber, WCHAR *wzName){    char szCmd[MAX_PATH] = {0};    sprintf(szCmd,"AT+CPBR=%u\r\n",index);    if(SendATCmd(szCmd))//取指定的号码    {        char *szBegin = strstr(m_strRespBuf, "CPBR");//移到CPBR        if(!szBegin) return FALSE;        szBegin = strchr(szBegin,'"');//移到号码前的引号        if(!szBegin) return FALSE;        szBegin++;//移到号码处,即移过号码前的引号                char *szEnd = strchr(szBegin,'"');//找到号码后的引号        if(!szEnd) return FALSE;        mbstowcs(wzNumber,szBegin,szEnd-szBegin);//取得电话号码,取到号码后都可以返回TRUE        szBegin = szEnd + 1;//移过号码后的引号        szBegin = strchr(szBegin,'"');//找到姓名编码前的引号        if(!szBegin) return TRUE;        szBegin ++;//移过姓名编码前的引号        szEnd = strchr(szBegin,'"');//找到姓名编码后的引号        if(!szEnd) return TRUE;        char szName[BUFF_SIZE] = {0};        strncpy(szName,szBegin,szEnd-szBegin);//取得姓名        Str_ConvertToUnicode(szName, wzName);        return TRUE;    }    return FALSE;}
  相关解决方案