先吐槽一波,写在代码里面比起xml明明更不容易修改却叫动态注册,挺离谱的就。
先示范怎么接受系统广播,在这里是接受网络变化的广播,具体在注释里面仔细看看。
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkReceiver networkReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//网络变化时,系统会发出一条值为android.net.conn.CONNECTIVITY_CHANGE的广播,我们通过IntentFilter来过滤掉其他的广播。
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//注册接收器的过滤器
networkReceiver=new NetworkReceiver();
registerReceiver(networkReceiver,intentFilter);
}
//活动在销毁的时候,一定要注销掉接收器,否则可能导致活动无法被回收导致内存泄露。
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkReceiver);
}
class NetworkReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();
}
}
}
加个检测网络是否可用试试
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//进行这个操作需要这个app有访问网络状态的权限,在AndroidManifest的注册文档中加一句,
// 就行。
NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isAvailable()){
Toast.makeText(context,"可用",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context,"不可用",Toast.LENGTH_SHORT).show();
}
}



