zoukankan      html  css  js  c++  java
  • (原创)用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版本中要求打开过应用广播接收者才会生效.

  • 相关阅读:
    if __name__ == '__main__' 用法理解
    VSCode 使用
    sys.argv用法简介
    [Python3] RSA的加解密和签名/验签实现 -- 使用pycrytodome
    python requests 超时与重试
    collections模块之defaultdict()与namedtuple()方法简单介绍
    setdefault函数的用法及理解
    python并发编程之IO模型 同步 异步 阻塞 非阻塞
    django+uWSGI+nginx的工作原理流程与部署过程
    Nginx静态服务配置---详解root和alias指令
  • 原文地址:https://www.cnblogs.com/BlogCommunicator/p/4883795.html
Copyright © 2011-2022 走看看