Android 获取手机信号

public class MobilePhoneState {

    private TelephonyManager telephonyManager;
    private ServiceState mServiceState;
    private SignalStrength mSignalStrength;
    private int mDataState;
    private MobilePhoneStateChangeListener mobilePhoneStateChangeListener;
    private MobilePhoneStateListener mobilePhoneStateListener;
    private MobileState mobileState;

    public MobilePhoneState(Context context){
        telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        mobileState = new MobileState();
        mobileState.dataConnect = telephonyManager.getDataState() == DATA_CONNECTED;
        mobileState.dataNetType = telephonyManager.getDataNetworkType();
        mobilePhoneStateListener = new MobilePhoneStateListener();
        telephonyManager.listen(mobilePhoneStateListener,
                PhoneStateListener.LISTEN_SERVICE_STATE
                        | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
                        | PhoneStateListener.LISTEN_CALL_STATE
                        | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
                        | PhoneStateListener.LISTEN_DATA_ACTIVITY);
    }

    public void setMobilePhoneStateChangeListener(MobilePhoneStateChangeListener mobilePhoneStateChangeListener) {
        this.mobilePhoneStateChangeListener = mobilePhoneStateChangeListener;
        mobilePhoneStateChangeListener.onMobilePhoneStateChange(mobileState.signalLevel,mobileState.dataConnect,mobileState.dataNetType);
    }

    public void unregister(){
        if(telephonyManager != null){
            telephonyManager.listen(mobilePhoneStateListener,PhoneStateListener.LISTEN_NONE);
        }
    }

    class MobilePhoneStateListener extends PhoneStateListener {

        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);
            mSignalStrength = signalStrength;
            updateTelephony();
        }

        @Override
        public void onServiceStateChanged(ServiceState serviceState) {
            super.onServiceStateChanged(serviceState);
            mServiceState = serviceState;
            updateTelephony();
        }

        @Override
        public void onDataConnectionStateChanged(int state, int networkType) {
            super.onDataConnectionStateChanged(state, networkType);
            mDataState = state;
            mobileState.dataNetType = networkType;
            updateTelephony();
        }

    }

    private void updateTelephony(){
        boolean connected = hasService() && mSignalStrength != null;
        int level = 0;
        boolean dataConnect;

        if(connected){
            level = mSignalStrength.getLevel();
        }

        dataConnect = mDataState == DATA_CONNECTED;

        mobileState.signalLevel = level;
        mobileState.dataConnect = dataConnect;
        if(mobilePhoneStateChangeListener != null){
            mobilePhoneStateChangeListener.onMobilePhoneStateChange(mobileState.signalLevel,mobileState.dataConnect,mobileState.dataNetType);
        }
    }

    private boolean hasService() {
        if (mServiceState != null) {
            return mServiceState.getState() == ServiceState.STATE_IN_SERVICE;
        } else {
            return false;
        }
    }

    class MobileState{
        public int signalLevel;
        public boolean dataConnect;
        public int dataNetType;
    }

    public interface MobilePhoneStateChangeListener{
        /**
         * @param signalLevel 信号强度
         * @param dataConnect 连接互联网
         * @param dataNetType 网络类型
         * */
        void onMobilePhoneStateChange(int signalLevel, boolean dataConnect, int dataNetType);
    }
}

你可能感兴趣的:(Android,手机信号)