• (原创)用Receiver和SystemService监听网络状态,注册Receiver的两种方式


    android中网络编程不可避免地要监听网络状态,wifi或者3G以及以太网,并根据当前状态做出相应决策.

    在MyReceiver类中的onReceive方法中获得系统服务

    ConnectivityManager manager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            NetworkInfo mobInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            
            if(wifiInfo.isConnected){
                Toast.makeText(context, "wifi isConnected", Toast.LENGTH_SHORT).show();
                return;
            }else if(mobInfo.isConnected()){
                Toast.makeText(context, "mob isConnected", Toast.LENGTH_SHORT).show();
                return;
            }else{
                Toast.makeText(context, "none is Connected", Toast.LENGTH_SHORT).show();
                return;
            }

    静态注册方法:

    <receiver android:name=".MyReceiver">  
                <intent-filter>  
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>  
                </intent-filter>  
    </receiver>  

    或者动态注册方法(MainActivity中):

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
            myReceiver = new myWifiReceiver();
            registerReceiver(myReceiver, filter);
        }
        
        @Override
        protected void onDestroy() {
            unregisterReceiver(myReceiver);
            super.onDestroy();
        }

    权限:

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

    这里要注意两点:

    1.动态注册并且onDestroy()时解除注册的话,退出后就不接受广播了.

    但是再次打开应用时会执行onReceive()方法.

    2.较高api版本中要求打开过应用广播接收者才会生效.

  • 相关阅读:
    前端框架AngularJS入门
    springcloud---Eureka yml
    springcloud 的Eureka配置
    虚拟机中文件和目录的相关操作
    SpringBoot整合Redis
    IDEA整合GIT操作
    Ubuntu 安装步骤
    Centos 7 安装
    Centos 6 安装步骤
    防止root口令被破解
  • 原文地址:https://www.cnblogs.com/BlogCommunicator/p/4883795.html
Copyright © 2020-2023  润新知