まず、lte rsrp (またはその他の) 値を取得するためのコードを次に示します。このコードは別の aysncTask で実行されます。
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int tempInt;
while (isRunning) {
try {
List<CellInfo> cellInfoList = tm.getAllCellInfo();
if (cellInfoList != null && cellInfoList.size() != 0) {
msg = handler.obtainMessage();
CellInfo cellInfo = cellInfoList.get(0);
result = -9999;
tempInt = 0;
if (cellInfo instanceof CellInfoWcdma) {
result = ((CellInfoWcdma) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "3G : " + result + "");
} else if (cellInfo instanceof CellInfoLte) {
result = ((CellInfoLte) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "LTE : " + result);
} else if (cellInfo instanceof CellInfoGsm) {
result = ((CellInfoGsm) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "GSM" + result);
} else if (cellInfo instanceof CellInfoCdma) {
result = ((CellInfoCdma) cellInfo).getCellSignalStrength().getDbm();
Log.e(TAG, "CDMA" + result);
}
.....
問題は、取得しているデータが正しいかどうかわからないことです。
このソースをバックグラウンドで実行して rsrp 値を確認しながら、コマンド *123456# を使用して LG G3 の隠しメニューを実行します。これは、リアルタイムの rsrp 値を示すデバッグ モードを示しています。
問題は、ほとんどの場合、アプリのログに表示される rsrp と非表示のメニューに表示される rsrp が異なることです。私のアプリでは、さらに -3 ~ +3 ほど表示されます。
なぜこれが起こっているのですか?私のコードに何か問題がありますか? 上記のコードには時間間隔がなく、アプリケーションを強制終了する前に続行されます。