0
点赞
收藏
分享

微信扫一扫

Android11 LTE信号强度获取 3568

独兜曲 2022-04-24 阅读 79

借鉴了其他人的一些方法,但是在中间发现LTE的情况下。使用getDbm()方法是获取不到信号强度的。需要另外一个Rssi。

具体如下,大部分还是借鉴别人的:

 /**
     * 获取手机信号强度,需添加权限 android.permission.ACCESS_COARSE_LOCATION <br>
     * API要求不低于17 <br>
     *
     * @return 当前手机主卡信号强度, 单位 dBm(-1是默认值,表示获取失败)
     */
    @RequiresApi(api = Build.VERSION_CODES.Q)
    @SuppressLint("MissingPermission")
    public static int getMobileDbm(Context context) {
        int dbm = -1;
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        List<CellInfo> cellInfoList;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            cellInfoList = tm.getAllCellInfo();
            Log.e("tiwolf", "getMobileDbm: 信号列表="+(cellInfoList!=null?cellInfoList.size():-1));
            if (null != cellInfoList)
            {
                for (CellInfo cellInfo : cellInfoList)
                {
                    Log.e("tiwolf", "getMobileDbm: 查看信号是否注册="+cellInfo.isRegistered());
                    if (cellInfo.isRegistered()){
                        if (cellInfo instanceof CellInfoGsm)
                        {
                            CellSignalStrengthGsm cellSignalStrengthGsm = ((CellInfoGsm)cellInfo).getCellSignalStrength();
                            dbm = cellSignalStrengthGsm.getDbm();
                            Log.e("tiwolf", "getMobileDbm: Gsm信号===="+cellSignalStrengthGsm.getDbm() );
                        }
                        else if (cellInfo instanceof CellInfoCdma)
                        {
                            CellSignalStrengthCdma cellSignalStrengthCdma =
                                    ((CellInfoCdma)cellInfo).getCellSignalStrength();
                            dbm = cellSignalStrengthCdma.getDbm();
                            Log.e("tiwolf", "getMobileDbm: Cdma信号===="+cellSignalStrengthCdma.getDbm() );
                        }
                        else if (cellInfo instanceof CellInfoWcdma)
                        {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
                            {
                                CellSignalStrengthWcdma cellSignalStrengthWcdma =
                                        ((CellInfoWcdma)cellInfo).getCellSignalStrength();
                                dbm = cellSignalStrengthWcdma.getDbm();
                                Log.e("tiwolf", "getMobileDbm: Wcdma信号===="+cellSignalStrengthWcdma.getDbm() );
                            }
                        }
                        else if (cellInfo instanceof CellInfoLte)
                        {
                            CellSignalStrengthLte cellSignalStrengthLte = ((CellInfoLte)cellInfo).getCellSignalStrength();
                            dbm = cellSignalStrengthLte.getRssi();
                            Log.e("tiwolf", "getMobileDbm: Lte信号===="+cellSignalStrengthLte.getRssi() );
                        }
                    }

                }
            }
        }
        return dbm;
    }

先检查当前是否isRegistered,这个一定要筛选,不然得到的有可能是一大长串数字。然后再将getDbm()方法更改下就可以了。这个主要适合我当前做的3568,而且还是LTE的情况下。其他的没试过不知道。使用慎重

主要参考:一种获取手机信号强度的方法_三火哥的博客-CSDN博客_getdbm

举报

相关推荐

0 条评论