Android獲取手機信號強度/信號格數

這裏的信號強度和格數是指狀態欄裏的信號條數目📶

比如這樣有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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章