这里的信号强度和格数是指状态栏里的信号条数目

比如这样有4条,获得的值就是4

需要先通过TMS注册一个监听,代码如下

    private static int mLteLevel = -1;    /**     * 监听手机信号变化     */    private static void listenSignalStrengths() {        final TelephonyManager telephonyManager = (TelephonyManager) Core.context().getSystemService(Context.TELEPHONY_SERVICE);        if (telephonyManager == null) {            return;        }        telephonyManager.listen(new PhoneStateListener() {            @Override            public void onSignalStrengthsChanged(SignalStrength signalStrength) {                super.onSignalStrengthsChanged(signalStrength);                try {                    Method getLteLevelMethod = signalStrength.getClass().getMethod("getLteLevel");                    mLteLevel = DataUtils.getInt(getLteLevelMethod.invoke(signalStrength));                    Log.i("NetUtil", "onSignalStrengthsChanged:" + mLteLevel);                } catch (Throwable e) {                    Log.i("NetUtil", "onSignalStrengthsChanged:" + e);                }            }        }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);    }

mLteLevel作为成员变量,当信号强度发生变化时,他会自己更新,再提供一个getter就可以了

    /**     * 获取手机信号强度格数,一般为 0-4     */    public static int getLteLevel() {        return mLteLevel;    }

给listenSignalStrengths方法找住处比较麻烦,所以可以放在静态代码块里,整体就像这样,调用getLteLevel获取就可以了。

不过需要注意的是,第一次取的时候可能是默认值-1,介意的话就把listenSignalStrengths提前到Application也可以。

public class NetUtil {    public static final String TAG = "NetUtil";    static {        listenSignalStrengths();    }    /**     * 监听手机信号变化     */    private static void listenSignalStrengths() {        final TelephonyManager telephonyManager = (TelephonyManager) Core.context().getSystemService(Context.TELEPHONY_SERVICE);        if (telephonyManager == null) {            return;        }        telephonyManager.listen(new PhoneStateListener() {            @Override            public void onSignalStrengthsChanged(SignalStrength signalStrength) {                super.onSignalStrengthsChanged(signalStrength);                try {                    Method getLteLevelMethod = signalStrength.getClass().getMethod("getLteLevel");                    mLteLevel = DataUtils.getInt(getLteLevelMethod.invoke(signalStrength));                    NTLog.i(TAG, "onSignalStrengthsChanged:" + mLteLevel);                } catch (Throwable e) {                    NTLog.i(TAG, "onSignalStrengthsChanged:" + e);                }            }        }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);    }    /**     * 获取手机信号强度格数,一般为 0-4     */    public static int getLteLevel() {        return mLteLevel;    }}

 

更多相关文章

  1. android音频口通信——2FSK信号调制
  2. Android 获取手机信号
  3. android音频口通信(二)——2FSK信号解调
  4. CAMERA(12)---[Android相机]光线传感器识别环境光亮强度
  5. android获取wifi信号强度
  6. Android 获取wifi信号强度
  7. Android实时获得周围wifi信息(SSID,强度等)
  8. PHP多进程、信号量及孤儿进程和僵尸进程
  9. Java中的信号量Semaphore

随机推荐

  1. Unity3D实现模型体积拖拽变化
  2. MySQL5.7.30 Linux编译过程记录
  3. Python和JavaScript哪个容易上手?0基础必
  4. weqr
  5. 实现一个简易数字货币现货跟单机器人
  6. 京东 37 岁程序员加班猝死?当事人回应:我还
  7. 详解支撑7亿用户搜索的百度图片处理收录
  8. 在线考试助力互联网教育,教育+AI这个考试
  9. 和几个大佬吃饭,聊了他们年收入,吓尿我了!
  10. 再见深圳!我要去成都搞IT了!