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

比如这样有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短信的发送和广播接收者实现短信的监听
  2. android ListView中添加ImageButton按钮并绑定事件
  3. Android手势监听类GestureDetector
  4. android点滴(23)之android监听应用卸载
  5. Android(安卓)Map demo
  6. 监听android电话呼叫状态
  7. 在Android中,如何通过onTouchEvent实现Double Click,判断为双击事
  8. Android获取通话状态
  9. Android开机广播android.intent.action.BOOT_COMPLETED

随机推荐

  1. Android(安卓)layout xml总结
  2. Android(安卓)TextView 组件
  3. 去掉非首次开机的优化过程都会有'Android
  4. item嵌套button使listview onitemClick事
  5. android中几种定位方式详解
  6. android源码解析-异步消息
  7. android之通过MediaRecorder进行手机录音
  8. eclipse中在线升级adt遇到问题
  9. Android(安卓)广播获取短信内容
  10. Android(安卓)Studio 上如何使用LogCat