Android:PhoneStateListener:onCellLocationChanged

时间:2013-07-31 11:18:55

标签: android phone-state-listener cellid

当我覆盖上述功能并记录CellLocation时,我收到以下值

[425,56301,-1]

当我漫游一下时,上面的值会变为

[425,56302,-1][425,56303,-1]

这些值代表什么?我认为56301是CellId。还有两个什么?

1 个答案:

答案 0 :(得分:7)

由于CellLocation可以是GsmCellLocationCdmaCellLocation,因此您必须查看这些类。

在您的情况下,您正在使用GsmCellLocation的实例,其“toString()”实现如下:

@Override
public String toString() {
    return "["+ mLac + "," + mCid + "," + mPsc + "]";
}

我们可以得出结论:

  • 425 - LAC - 位置区号 - 这标识了您的终端当前所在的网络区域。 Cellural网络由小区组成(即,一个基站处理一个小区),并且这些小区被分组为位置区域。每个区域都有它的标识符 - LAC。
  • 56302 - CID - 小区ID - 为您的设备提供服务的小区的标识符。
  • -1 - PSC - 主要扰码 - 仅限UMTS。

关于LAC

位置区域是在蜂窝网络中定义的逻辑实体,用于减少网络中的信令流量。简而言之,位置区域是一组细胞。每个位置区域由LAC识别。

当您四处走动时,您的手机正在使用不同的基站。手机总是知道它可以使用哪个基站,因为手机经常测量信号电平。

例如:如果您在单元格A的范围内,然后移开,并且某个新单元格将具有更好的范围,您的手机将立即注意到。但它不应该通知网络这个事实,因为它会产生大量的信令数据(服务小区经常被改变)。

另一方面,当有人打电话给你时会发生什么?网络必须通知您的手机。但它不知道手机在哪里。好吧,它可以向每个基站发送消息并通过无线电广播,但同样,这将是大量的信令流量。所以网络必须知道这里的电话。

所以,我们在这里有两股力量:

  1. 每次CID更改时,电话都不应通知网络(因为信令流量很大)
  2. 网络不应该在每个小区中寻找电话(同样,大量的信令流量)。
  3. 位置区域是一种在这里找到良好平衡的方法。

    1. 只有在位置区域(LAC)发生变化时,电话才会在每次CID更改时通知网络。
    2. 网络不会在一个国家/地区的每个小区中“寻呼”手机,而只会在给定位置区域的每个小区中“寻呼”。