为了账号安全,请及时绑定邮箱和手机立即绑定

使用广播接收器动态注册实现监听网络变化与静态注册实现开机自启

标签:
Android
  1. 动态注册实现监听网络变化
public class MainActivity extends Activity {

    private IntentFilter mIntentFilter;
    private NetWorkChangeReceiver mNetWorkChangeReceiver;//自定义内部类NetWorkChangeReceiver 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mIntentFilter = new IntentFilter();
        mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
/*当网络状态发生变化时,系统发出的是android.net.conn.CONNECTIVITY_CHANGE
这条广播,所以说,想监听什么类型的广播,就在这里添加相应的action就行了。*/

        mNetWorkChangeReceiver = new NetWorkChangeReceiver();
        registerReceiver(mNetWorkChangeReceiver, mIntentFilter);//注册广播接收器
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mNetWorkChangeReceiver);//动态注册的广播接收器需取消
    }

    class NetWorkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager)
                    getSystemService(Context.CONNECTIVITY_SERVICE);
//ConnectivityManager是一个系统服务类,专门用来管理网络连接
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()) {
// networkInfo.isAvailable()判断当前是否有网络
                Toast.makeText(context, "当前网络可用", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "无可用的网络", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

最后,记得需要在manifest文件中加入可以查看网络连接的权限。
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

  1. 静态注册实现开机自启
    动态注册虽然灵活,但有一个弱点,就是必须要在程序启动之后才能接收广播
public class BootCompleteReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context , "BroadcastText已启动!" , Toast.LENGTH_SHORT).show();
    }
}

然后在mainfest文件中将这个广播器的类名注册
uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED
此为监听系统开机广播权限

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

首先通过android:name 来指定具体注册哪个广播接收器,然后在intent-filer标签中加入想要接收的广播即可。
注意:
不同在onReceive方法中添加过多的逻辑或进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive方法进行了较长时间而没有结束时,程序就会报错。因此广播接收器更多的是扮演一种打开程序其他组件的角色。如创建一条状态栏通知,或者启动一个服务等。


转载自 郭霖 《第一行代码》

点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消