android广播动态监听一般设置的状态

public class SettingReceiver extends BroadcastReceiver {


    public enum NetState {NET_NO, NET_2G, NET_3G, NET_4G, NET_WIFI, NET_UNKNOWN}

    public enum BluetoothState {STATE_OFF, STATE_ON}

    public enum WIFIState {STATE_OFF, STATE_ON}

    public enum GPRSState {STATE_OFF, STATE_ON}

    public enum AirPlaneState {STATE_OFF, STATE_ON}

    public enum RingerState {RINGER_MODE_NORMAL, RINGER_MODE_VIBRATE, RINGER_MODE_SILENT}

    private CallBack mCallBack;

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (mCallBack != null) {
            if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
                //蓝牙
                //http://www.cnblogs.com/lesliefang/p/5445684.html
                int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
                switch (state) {
                    case BluetoothAdapter.STATE_OFF:
                        mCallBack.getBluetoothState(BluetoothState.STATE_OFF);
                        //case BluetoothAdapter.STATE_TURNING_OFF:
                        break;
                    case BluetoothAdapter.STATE_ON:
                        //case BluetoothAdapter.STATE_TURNING_ON:
                        mCallBack.getBluetoothState(BluetoothState.STATE_ON);
                        break;
                }
            } else if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
                //网络
                ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                mCallBack.getWIFIState(SystemUtils.isOpenWifi(context) ? WIFIState.STATE_ON : WIFIState.STATE_OFF);
                mCallBack.getGPRSState(SystemUtils.isOpenGPRS(context) ? GPRSState.STATE_ON : GPRSState.STATE_OFF);
                NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
                if (networkInfo != null && networkInfo.isConnectedOrConnecting()) {
                    switch (networkInfo.getType()) {
                        case ConnectivityManager.TYPE_WIFI:
                            mCallBack.getNetState(NetState.NET_WIFI);
                            break;
                        case ConnectivityManager.TYPE_MOBILE:
                            switch (networkInfo.getSubtype()) {
                                case TelephonyManager.NETWORK_TYPE_GPRS: //联通2g
                                case TelephonyManager.NETWORK_TYPE_CDMA: //电信2g
                                case TelephonyManager.NETWORK_TYPE_EDGE: //移动2g
                                case TelephonyManager.NETWORK_TYPE_1xRTT:
                                case TelephonyManager.NETWORK_TYPE_IDEN:
                                    mCallBack.getNetState(NetState.NET_2G);
                                    break;
                                case TelephonyManager.NETWORK_TYPE_EVDO_A: //电信3g
                                case TelephonyManager.NETWORK_TYPE_UMTS:
                                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                                case TelephonyManager.NETWORK_TYPE_HSDPA:
                                case TelephonyManager.NETWORK_TYPE_HSUPA:
                                case TelephonyManager.NETWORK_TYPE_HSPA:
                                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                                case TelephonyManager.NETWORK_TYPE_EHRPD:
                                case TelephonyManager.NETWORK_TYPE_HSPAP:
                                    mCallBack.getNetState(NetState.NET_3G);
                                    break;
                                case TelephonyManager.NETWORK_TYPE_LTE:
                                    mCallBack.getNetState(NetState.NET_4G);
                                    break;
                                default:
                                    mCallBack.getNetState(NetState.NET_UNKNOWN);
                            }
                            break;
                        default:
                            mCallBack.getNetState(NetState.NET_UNKNOWN);
                    }
                } else {
                    mCallBack.getNetState(NetState.NET_NO);
                }
            } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
                //电量
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);//获得当前电量
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                //获得总电量
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                mCallBack.getCurrentBattery(level);
            } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
                int isAirplaneMode = Settings.System.getInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, 0);
                mCallBack.getAirPlaneState(isAirplaneMode == 0 ? AirPlaneState.STATE_ON : AirPlaneState.STATE_OFF);
            } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) {
                AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                final int ringerMode = am.getRingerMode();
                switch (ringerMode) {
                    case AudioManager.RINGER_MODE_NORMAL:
                        //normal
                        mCallBack.getRingerState(RingerState.RINGER_MODE_NORMAL);
                        break;
                    case AudioManager.RINGER_MODE_VIBRATE:
                        //vibrate
                        mCallBack.getRingerState(RingerState.RINGER_MODE_VIBRATE);
                        break;
                    case AudioManager.RINGER_MODE_SILENT:
                        mCallBack.getRingerState(RingerState.RINGER_MODE_SILENT);
                        //silent
                        break;
                }
            }
        }
    }

    public void setCallBack(CallBack callBack) {
        this.mCallBack = callBack;
    }

    public interface CallBack {

        public void getBluetoothState(BluetoothState state);

        public void getNetState(NetState state);

        public void getWIFIState(WIFIState state);

        public void getGPRSState(GPRSState state);

        public void getAirPlaneState(AirPlaneState state);

        public void getRingerState(RingerState state);

        public void getCurrentBattery(int level);
    }


    /**
     * 举例
     *
     * @param context
     * @param callBack
     */
    public static void registerReceiver(Context context, CallBack callBack) {
        SettingReceiver settingReceiver = new SettingReceiver();
        IntentFilter bluetoothFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        IntentFilter netFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        IntentFilter airPlaneFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        IntentFilter audioFilter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
        context.registerReceiver(settingReceiver, bluetoothFilter);
        context.registerReceiver(settingReceiver, netFilter);
        context.registerReceiver(settingReceiver, batteryLevelFilter);
        context.registerReceiver(settingReceiver, airPlaneFilter);
        context.registerReceiver(settingReceiver, audioFilter);
        //通过回调获取信息
        settingReceiver.setCallBack(callBack);
    }
}

=======================================================

public class GpsReceiver {

    private LocationManager mLocationManager;

    private Context mContext;

    private final ContentObserver mGpsMonitor = new ContentObserver(null) {
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            boolean enabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            if (callBack != null) {
                callBack.getGpsState(enabled);
                //return;
            }
        }
    };

    public GpsReceiver(Context context) {
        mContext = context.getApplicationContext();
        mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
    }

//    private volatile static GpsReceiver mGpsReceiver;
//
//    public static GpsReceiver getInstance(Context context) {
//        GpsReceiver temp = mGpsReceiver;
//        if (temp == mGpsReceiver) {
//            synchronized (GpsReceiver.class) {
//                temp = mGpsReceiver;
//                if (temp == null) {
//                    temp = new GpsReceiver(context);
//                    mGpsReceiver = temp;
//                }
//            }
//        }
//        return temp;
//    }

    /**
     * 启动
     */
    public void onStart() {
        mContext.getContentResolver()
                .registerContentObserver(
                        Settings.Secure.getUriFor(Settings.System.LOCATION_PROVIDERS_ALLOWED),
                        false,
                        mGpsMonitor);
    }

    /**
     * 取消
     */
    public void onStop() {
        mContext.getContentResolver().unregisterContentObserver(mGpsMonitor);
    }

    private CallBack callBack;

    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }

    public interface CallBack {
        public void getGpsState(boolean state);
    }

    /**
     * 举例
     *
     * @param context
     * @param callBack
     */
    public static void registerReceiver(Context context, CallBack callBack) {
        GpsReceiver gpsReceiver = new GpsReceiver(context);
        gpsReceiver.onStart();
        gpsReceiver.setCallBack(callBack);
    }
}

 

=====================================================

求解答,目前我不知道怎么获取 同步 和 屏幕旋转 的监听

转载于:https://my.oschina.net/moziqi/blog/715802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值