安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点

全栈工程师开发手册 (作者:栾鹏)
安卓教程全解

安卓网络连接情况全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点

网络连接情况的监听和网络数据使用情况的监听

  private void listen_net() 
  {
	    //注册用于监听后台数据使用情况变化的BroadcastReceiver
	    registerReceiver(new BroadcastReceiver() {
	        @Override
	        public void onReceive(Context context, Intent intent) {
	        	Log.v("网络数据使用变化", "");
	        }
	      },new IntentFilter(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED)   //触发监听的广播行为
	    );
	    
	    //用于监听网络连接变化的BroadcastReceiver
	    registerReceiver(new BroadcastReceiver() {
	        @Override
	        public void onReceive(Context context, Intent intent) {
	        	Log.v("网络连接变化", "网络状态已经改变"); 
	        	netinfo();
	        }
	      },new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) //触发监听的广播行为
	    ); 
  }
  

获取当前网络信息

移动网络和wifi网络都是网络情况的一种情况

  public void netinfo() 
  {
	    //访问Connectivity Manager网络连接服务
	    String service = Context.CONNECTIVITY_SERVICE;
	    final ConnectivityManager connectivity = (ConnectivityManager)getSystemService(service);
	    
	  	//访问网络信息
	    NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
	    boolean isConnected = ((activeNetwork  != null) && (activeNetwork.isConnectedOrConnecting()));
	    boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
	    Log.v("网络信息", "是否已连接网络:"+isConnected);
	    Log.v("网络信息", "是否连接了wifi:"+isWiFi);
	    if(isConnected)
	    {
	    	String netname=activeNetwork.getTypeName();
	    	Log.v("网络信息", "网络名称:"+netname);
	    }
  }

启动wifi、扫描wifi热点

wifi是网络连接的一种

  private void scan_wifi() {
	    //访问Wi-Fi Manager
	    String service = Context.WIFI_SERVICE;
	    final WifiManager wifi = (WifiManager)getSystemService(service);
	    
	    //监听并更改Wi-Fi状态
	    if (!wifi.isWifiEnabled())
	      if (wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING)
	        wifi.setWifiEnabled(true);
	    
	  //扫描wifi接入点,在开启了wifi,但还没有连上任何一个ssid时才会触发
	    //注册用于接收扫描结果的broadcast receiver
	    registerReceiver(new BroadcastReceiver() {
	      @Override
	      public void onReceive(Context context, Intent intent) {
	        List<ScanResult> results = wifi.getScanResults();
	        ScanResult bestSignal = null;
	        for (ScanResult result : results) {
	          if (bestSignal == null || WifiManager.compareSignalLevel(bestSignal.level,result.level) < 0)
	            bestSignal = result;
	        }
	        String connSummary = String.format("%s 个网络被发现,其中 %s 是信号最强的",results.size(),bestSignal.SSID);
	        Log.d("wifi扫描", connSummary);
	      }
	    }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

	    //开始扫描
	    wifi.startScan();
  }

获取当前wifi连接情况

private void wifiinfo() 
  {
	    //访问Wi-Fi Manager
	    String service = Context.WIFI_SERVICE;
	    final WifiManager wifi = (WifiManager)getSystemService(service);
	    
	    
	    //监听并更改Wi-Fi状态
	    if (!wifi.isWifiEnabled())
	      if (wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING)
	        wifi.setWifiEnabled(true);

	    //查询活动的网络连接,在连接到某个ssid时才触发
	    WifiInfo info = wifi.getConnectionInfo();
	    if (info.getBSSID() != null) {
	      int strength = WifiManager.calculateSignalLevel(info.getRssi(), 5); //信号强弱
	      int speed = info.getLinkSpeed();//网上速率
	      String units = WifiInfo.LINK_SPEED_UNITS; //速率单位
	      String ssid = info.getSSID(); //ssid
	      String mac = info.getMacAddress(); //mac地址
	      int ip = info.getIpAddress();  //ip地址
	      
	      String cSummary = String.format("当前wifi正连接到%s,速度%s%s,信号强度 %s/5",ssid, speed, units, strength);
	      Log.d("wifi连接", cSummary);
	    }
	    
	    
  }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值