0

まず、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 ほど表示されます。

なぜこれが起こっているのですか?私のコードに何か問題がありますか? 上記のコードには時間間隔がなく、アプリケーションを強制終了する前に続行されます。

4

1 に答える 1