专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动应用

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

发布时间:2010-05-30 21:28:18 文章来源:www.iduyao.cn 采编人员:星星草
老问题怎么获取本机手机号
移动的用白名单


那么电信和联通的了?


访问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;
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: