文档章节

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

WalkingMo
 WalkingMo
发布于 2016/07/21 18:26
字数 571
阅读 201
收藏 0
点赞 0
评论 0
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);
    }
}

 

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

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

© 著作权归作者所有

共有 人打赏支持
WalkingMo
粉丝 52
博文 336
码字总数 116759
作品 0
东莞
程序员
andriod-四大组件之广播Broadcast-短信的收发

我想几乎所有的安卓开发者,第一个接触到的四大组件之一就是activity,而我在之前的文章中也写过, 在activity里面getContext是大佬级别的存在(可以看前几章), 那么四大组件中的广播Broad...

九尾74 ⋅ 05/24 ⋅ 0

Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

一、前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 在线更新就上面几个步骤,前2步比较简...

codeGoogle ⋅ 04/28 ⋅ 0

AIDL跨进程Service推送消息到Activity

AIDL的概念不说了,一般都是Activity调用service的方法去获取一些东西,但是如何做到service主动回调activity的方法去推送一些东西的,这种需求一般也是会有的(比如后台有个定位,每次位置更新或...

倔强码农 ⋅ 04/11 ⋅ 0

《Android深入透析》之广播(Broadcast)

概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递。举一个大家都比较熟悉的例子来说明。在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频...

朵朵和糖糖 ⋅ 2014/11/12 ⋅ 0

Android WiFi开发 (二)Wifi热点

接着上一篇wifi的扫描连接等,这一篇主要说一下手机开启Wifi热点。 demo的下载地址会在最下面贴出来。 图片: 1 创建WIFI热点 经测试开启wifi热点(无秘密,wpa安全类型,wpa2安全类型)都可...

VNanyesheshou ⋅ 2016/03/07 ⋅ 0

Android 面试技能树梳理

相信大家都有面试的经历,相对比面试官的问的一些问题其实都是基础的知识,但就是一些基础的知识我们也不是很完美的回答出来,我们也知道现在的开发人员很多,一家公司一个岗位就会有很多的开...

liu3364575 ⋅ 05/05 ⋅ 0

Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

Android实时监听网络状态

新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页面的Activity都继承此基类BasicActivity.class (1)网络状态改变监听类:NetWorkChangRecei...

王先森oO ⋅ 05/08 ⋅ 0

BroadcastReceiver的源码分析

android提供了广播机制,通过BroadcastReceiver可以在不同的进程间传递消息。类似于观察者模式,A应用通过注册广播表示A对消息subject感兴趣,当B应用发出subject类型的消息的时候,A应用就能...

JasmineBen ⋅ 05/18 ⋅ 0

关于使用AlarmManager的注意事项

最近在做一个需求:客户端按照规定的时间间隔向服务端发送定位。一看到这个需求就想到了使用 来实现。 经常被用来执行定时任务,比如设置闹铃、发送心跳包等。也许有人会有疑问:为什么不能使...

hejunbinlan ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 16分钟前 ⋅ 1

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 40分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 45分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部