2

TelephonyManagerクラスとそのgetNeighboringCellInfoメソッドを介してAndroidで利用できる、隣接するセルに関するモバイル情報を利用しようとしています。以下に、ジョブを実行するコードの一部 (ほとんどは公開されているソースから取得) と、このコードが生成する出力の一例 (添付のスクリーンショットを参照) を掲載しています。コードと画像は何も変更せずに「そのまま」配置されているため、一方を他方に関連付けて正しく動作することを確認するのは比較的簡単なはずです (もちろん、私が見落としたエラーがある可能性があります)。

問題は、隣接するセルのリストに、次のような「正しくない」(私の理解では) データを持つ要素が含まれていることが多いことです。

  1. NeighboringCellInfoすべてのプロパティ - laccidpsc- が -1 に設定され、rssiフィールドのみが意味を持つように見えるa 。
  2. aは 0NeighboringCellInfolac等しい; lacこれは、現在アクティブなセルと同じであることを意味しますか?
  3. 値が[0, 31] の範囲外でNeighboringCellInfoあり、このような値は、正 (スクリーンショットに示されているように 33)、負 (適切な生の rssi 値のように見えます。つまり、から変換する必要はありません) にすることができます。rssiUNKNOWN_RSSIasu
  4. 同じ地理位置情報で取得されたリスト要素は、私が期待するほどの一貫性を示していません。つまり、2 つの連続したスキャンでは、すべての要素が他のスキャンで省略されている可能性があり、省略された要素の rssi レベルは最も低いものではありません。リスト内のレベル (実際、それらの rssi は現在使用されているセルよりも大きくなる可能性があります); すべてのセル信号が非常に不安定になる傾向がある場合、これが正しい動作である可能性があることは認めますが、GSM および/または UMTS ネットワークで一般的に正しいかどうかはわかりません。現在のセルには常にすべてのフィールドが適切に定義されていますが、その rssi は 30 dBm の範囲 (たとえば -60 から -90) で非常に急速に変化する可能性があります。
  5. 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);

ここに画像の説明を入力

4

2 に答える 2

0

モバイルデバイスは、必要に応じてより適切なセルに引き渡すことができるように、隣接するセルを認識している必要があります。いずれにせよ、隣接するセルに関する情報を取得するように指示したので、それを実行する必要があります。結果は、Androidのドキュメントに記載されているものとも一致していないようです。この問題をファームウェアのバグとしてデバイスベンダーに報告します。

たとえば、セルがGSMであり、デバイスが弱い信号のUMTSセルを優先した場合、信号が強い隣接セルが表示される状況を想像できますが、これはネットワークタイプのフィールドから明らかです。

于 2012-11-03T20:09:10.893 に答える