getCid()返回的UTRAN Cell Identity

时间:2011-08-30 07:38:08

标签: android

在UMTS中,我得到getCid()返回的大数字(大于允许值)。这是UTRAN小区标识(UC-ID)吗?

UC-Id = RNC-Id + C-Id

有人知道吗?如何从C-Id获取UC-Id

谢谢,最好, 尼

4 个答案:

答案 0 :(得分:6)

如果网络类型是UMTS / HSxPA / HSPA +,则RNC id是4字节Cell Id(3GPP 25.401,第6.1.5节)的前2个字节。“
我可以访问运营商网络我检查了系统,这是真的和正确的。
基于此,请参阅我的代码,如何轻松获得RNCID + CID:
将CID转换为ByteArray:

    public static byte[] convertByteArray__p(int p_int){
    byte[] l_byte_array = new byte[4];
    int MASK_c = 0xFF;
    for (short i=0; i<=3; i++){
        l_byte_array[i] = (byte) ((p_int >> (8*i)) & MASK_c);
    }
    return l_byte_array;
} 

获取RNCID和CID:

    public int getRNCID_or_CID__p(byte[] p_bytes, short p_which){
    int MASK_c = 0xFF;
    int l_result = 0;   
    if (p_which == Constants.CID_C) {
        l_result = p_bytes[0] & MASK_c ;
        l_result = l_result + ((p_bytes[1] & MASK_c ) << 8);
    } else if (p_which == Constants.RNCID_C){
        l_result = p_bytes[2] & MASK_c ;
        l_result = l_result + ((p_bytes[3] & MASK_c ) << 8);
    } else { 
        g_FileHandler.putLog__p('E', "getRNCID_or_CID__p invalid parameter");
    }
    return l_result;     
}

你可以像这样轻松打电话:

        byte[] l_byte_array = new byte[4];
        l_byte_array = convertByteArray__p(l_cid);
        int l_RNC_ID   = getRNCID_or_CID__p(l_byte_array,Constants.RNCID_C);
        int l_real_CID = getRNCID_or_CID__p(l_byte_array,Constants.CID_C);


常数RNCID_C(1)和CID_C(2)只是为了让我分开将要传递的参数。

答案 1 :(得分:3)

试 (单元格ID%65536) 它对我有用。

答案 2 :(得分:3)

这比这更简单。 Cell ID位于getCid()返回值的低位寄存器中,RNC是该值的高位寄存器(http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html#getCid())。 所以:

  

getCid()== RNC&lt;&lt; 16 | CID

     

CID = getCid()&amp; 0xFFFF的

     

RNC =(getCid()&gt;&gt; 16)&amp; 0xFFFF的

答案 3 :(得分:3)

如果CID是> 65536,它实际上不是小区ID,而是真实小区ID和RNC-ID的线性组合:

UTRAN_CELL_ID = RNCID x 65536 + CellID

要提取cellID,请使用模运算:

CellID = UTRAN_CELL_ID % 65536

要提取RNCID,请获取整数部分:

RNCID = UTRAN_CELL_ID / 65536