Android动态监听网络变化

广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播接收时,广播接收器就能收到该广播,并在内部处理其相应的逻辑。广播注册的方法有两种,在代码中注册与在AndridManifest.xml中注册,前者称为动态注册,后者为静态注册,接下来我们就说说关于动态注册的实现。

第一步:新建一个类,让其继承BroadcastReceiver,然后重写父类中的onReceive()方法,原理是当有广播来临时,onReceive()方法就会得到执行

我们新建BroadTest项目,修改MainActivity中的代码,在MainActivity中写一个内部类NetworkChangeReceiver

  //新建此类,让其继承BroadcastReceiver,并且重写onCreate方法
    public class NetworkChangeRecever extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connecttivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);//使用getSystemService得到ConnectivityManager实例
            NetworkInfo networkInfo=connecttivityManager.getActiveNetworkInfo();
            if(networkInfo!=null && networkInfo.isAvailable()) {
                Toast.makeText(context,"networks is available", Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(context,"networks is unavailable", Toast.LENGTH_SHORT).show();

            }
        }
    }
}

使用getSystemService()方法得到ConnectivityManger的实例,这是一个系统服务类,专门用于网络连接。

然后用它的getActiveNetworkInfo()方法得到NetworkInfo的实例

再用NetworkInfo的方法isAvailable()来判断是否有网,一目了然!

第二步:回到onCreate方法中创建实例实现方法

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeRecever networkChangeRecever;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter=new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//添加广播
        networkChangeRecever=new NetworkChangeRecever();
        registerReceiver(networkChangeRecever,intentFilter);//使用registerReceiver方法进行注册,将两实例都传进去
    }

首先创建IntentFilter实例,给它添加一个值为"android.net.conn.CONNECTIVITY_CHANGE"的action,这个值的作用就是监听广播,不同action有不同的作用,这里不再深究

接下来创建NetworkChangeRecever实例,调用registerReceiver方法进行注册,将IntentFilte与NetworkChangeRecever的实例都传进去,这样NetworkChangeRecever就会收到值为"android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了监听网络变化的功能

第三步:动态注册的广播接收器一定要取消实现才行

 public void onDestory()
    {
        super.onDestroy();
        unregisterReceiver(networkChangeRecever);
    }
调用  unregisterReceiver()方法实现

第四步:声名网络系统的访问权限

AndridManifest.xml中加入一行

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

就可以了!!!

注:运行时不要按back键,否则onCreate()方法会执行,应该按home键,然后在setting中找到Data usage,尝试开关网络设置按钮(Cellular date),可观察变化

仅供参考@.@

 
 
 

猜你喜欢

转载自blog.csdn.net/M_Edison/article/details/82725459