- 动态注册实现监听网络变化
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"
- 静态注册实现开机自启
动态注册虽然灵活,但有一个弱点,就是必须要在程序启动之后才能接收广播
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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦