TelephonyManager
クラスとそのgetNeighboringCellInfo
メソッドを介してAndroidで利用できる、隣接するセルに関するモバイル情報を利用しようとしています。以下に、ジョブを実行するコードの一部 (ほとんどは公開されているソースから取得) と、このコードが生成する出力の一例 (添付のスクリーンショットを参照) を掲載しています。コードと画像は何も変更せずに「そのまま」配置されているため、一方を他方に関連付けて正しく動作することを確認するのは比較的簡単なはずです (もちろん、私が見落としたエラーがある可能性があります)。
問題は、隣接するセルのリストに、次のような「正しくない」(私の理解では) データを持つ要素が含まれていることが多いことです。
NeighboringCellInfo
すべてのプロパティ -lac
、cid
、psc
- が -1 に設定され、rssi
フィールドのみが意味を持つように見えるa 。- aは 0
NeighboringCellInfo
にlac
等しい;lac
これは、現在アクティブなセルと同じであることを意味しますか? - 値が[0, 31] の範囲外で
NeighboringCellInfo
あり、このような値は、正 (スクリーンショットに示されているように 33)、負 (適切な生の rssi 値のように見えます。つまり、から変換する必要はありません) にすることができます。rssi
UNKNOWN_RSSI
asu
- 同じ地理位置情報で取得されたリスト要素は、私が期待するほどの一貫性を示していません。つまり、2 つの連続したスキャンでは、すべての要素が他のスキャンで省略されている可能性があり、省略された要素の rssi レベルは最も低いものではありません。リスト内のレベル (実際、それらの rssi は現在使用されているセルよりも大きくなる可能性があります); すべてのセル信号が非常に不安定になる傾向がある場合、これが正しい動作である可能性があることは認めますが、GSM および/または UMTS ネットワークで一般的に正しいかどうかはわかりません。現在のセルには常にすべてのフィールドが適切に定義されていますが、その rssi は 30 dBm の範囲 (たとえば -60 から -90) で非常に急速に変化する可能性があります。
- 4 と同じですが、日ごとの一貫性についてです。高度に都市化され成熟した環境では、毎日同じセルのリストが表示されることを期待しますが、それらは非常に多様であるため、ある日、前のセルでアクティブなセルであったセルについての言及さえ見られなくなります。日。
これはすべて、モバイル技術の正常な機能、おそらく省電力の最適化、または特定のデバイス (私の場合は LG Optimus One) の欠陥を意味しますか?
可能であれば、Android のセル環境から一貫した読み取り値を取得する方法を提案してください。
GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();
String networkOperator = telephonyManager.getNetworkOperator();
int type = telephonyManager.getNetworkType();
String mcc = networkOperator.substring(0, 3);
String mnc = networkOperator.substring(3);
textMCC.setText("mcc: " + mcc + " mnc: " + mnc);
textMNC.setText("operator: " + networkOperator);
int cid = cellLocation.getCid();
int lac = cellLocation.getLac();
int psc = cellLocation.getPsc();
textGsmCellLocation.setText(cellLocation.toString());
textCID.setText("lac: " + String.valueOf(lac) + " cid: " + String.valueOf(cid) + " psc: " + String.valueOf(psc) + " type: " + String.valueOf(type) + " rssi: " + String.valueOf(currentCellRSSI));
TextView Neighboring = (TextView)findViewById(R.id.neighboring);
List<NeighboringCellInfo> NeighboringList = telephonyManager.getNeighboringCellInfo();
String stringNeighboring = "Neighboring List - Lac : Cid : Psc : type : RSSI\n";
for(int i = 0; i < NeighboringList.size(); i++)
{
String dBm;
int rssi = NeighboringList.get(i).getRssi();
if(rssi == NeighboringCellInfo.UNKNOWN_RSSI)
{
dBm = "Unknown RSSI";
}
else
{
if(rssi >= 0 && rssi < 32)
{
dBm = String.valueOf(-113 + 2 * rssi) + " dBm";
}
else
{
dBm = "Unknown value:" + Integer.toString(rssi);
}
}
stringNeighboring = stringNeighboring
+ String.valueOf(NeighboringList.get(i).getLac()) + " : "
+ String.valueOf(NeighboringList.get(i).getCid()) + " : "
+ String.valueOf(NeighboringList.get(i).getPsc()) + " : "
+ String.valueOf(NeighboringList.get(i).getNetworkType()) + " : "
+ dBm + "\n";
}
Neighboring.setText(stringNeighboring);