Android开发 广播监听系统的各种状态


前言

  此篇博客用于记录系统的各种广播状态

广播监听开机

  注册静态广播

        <receiver android:name=".receiver.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

  添加权限

   <!-- 接收开机广播的权限,开机是很危险的行为,所以需要此权限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

  接收广播

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
            L.e("设备开机了");
        }
    }
}

广播监听关机

  注册静态广播

        <receiver android:name=".receiver.ShutdownReceiver">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
            </intent-filter>
        </receiver>

  接收广播

public class ShutdownReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.ACTION_SHUTDOWN")){
            L.e("设备关机了...");
        }
    }
}

网络变化广播

注册

        IntentFilter networkChangeFilter = new IntentFilter();
        networkChangeFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        NetWorkChangeReceiver netWorkChangeReceiver = new NetWorkChangeReceiver();//网络变化广播
        registerReceiver(netWorkChangeReceiver, networkChangeFilter);

接收

public class NetWorkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent == null) {
            return;
        }
        String action = intent.getAction();
        if (TextUtils.isEmpty(action)) {
            return;
        }


        if (!TextUtils.equals(action, ConnectivityManager.CONNECTIVITY_ACTION)) {
            return;
        }
        // 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听

        Log.i("hcz", " CONNECTIVITY_ACTION ");
        //获取联网状态的NetworkInfo对象
        NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
        if (info == null) {
            return;
        }
        if (NetworkInfo.State.CONNECTED != info.getState() || !info.isAvailable()) {
            EventBus.getDefault().post(new NetChangerEvent(false));
            return;
        }

        int type = info.getType();
        //如果当前的网络连接成功并且网络连接可用
        if (type == ConnectivityManager.TYPE_WIFI || type == ConnectivityManager.TYPE_MOBILE) {
            Log.i("hcz", getConnectionType(info.getType()) + "连上");
            EventBus.getDefault().post(new NetChangerEvent(true));
        }
    }

    /**
     * 获取连接类型
     *
     * @param type type
     * @return String
     */
    private String getConnectionType(int type) {
        String connType = "";
        if (type == ConnectivityManager.TYPE_MOBILE) {
            connType = "3G网络数据";
        } else if (type == ConnectivityManager.TYPE_WIFI) {
            connType = "WIFI网络";
        }
        return connType;
    }

}

时间变化广播

注册

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_TIME_TICK);                            //时间变化广播
        registerReceiver(new TimeChangeReceiver(), intentFilter);

接收

public class TimeChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_TIME_TICK)) {
            LogUtils.d("时间变化");
        }
    }
}

 

 

end


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM