zoukankan      html  css  js  c++  java
  • Android网络开启、关闭整理

    近段时间由于要对手机网络状况进行判断、开启和关闭,从网上找了些资料,现整理如下


    包含了对WiFi、GPRS、飞行模式的开启、关闭以及一些状态的检测,在小米和三星平板上测试均通过

      1. package com.my.device_admin.business;  
      2.   
      3. import java.lang.reflect.Method;  
      4.   
      5. import android.content.Context;  
      6. import android.content.Intent;  
      7. import android.net.ConnectivityManager;  
      8. import android.net.NetworkInfo;  
      9. import android.net.wifi.WifiManager;  
      10. import android.provider.Settings;  
      11.   
      12. public class NetworkManager {  
      13.   
      14.     private Context context;  
      15.     private ConnectivityManager connManager;  
      16.   
      17.     public NetworkManager(Context context) {  
      18.         this.context = context;  
      19.         connManager = (ConnectivityManager) this.context  
      20.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
      21.     }  
      22.   
      23.     /** 
      24.      * @return 网络是否连接可用 
      25.      */  
      26.     public boolean isNetworkConnected() {  
      27.   
      28.         NetworkInfo networkinfo = connManager.getActiveNetworkInfo();  
      29.   
      30.         if (networkinfo != null) {  
      31.             return networkinfo.isConnected();  
      32.         }  
      33.   
      34.         return false;  
      35.     }  
      36.   
      37.     /** 
      38.      * @return wifi是否连接可用 
      39.      */  
      40.     public boolean isWifiConnected() {  
      41.   
      42.         NetworkInfo mWifi = connManager  
      43.                 .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
      44.   
      45.         if (mWifi != null) {  
      46.             return mWifi.isConnected();  
      47.         }  
      48.   
      49.         return false;  
      50.     }  
      51.   
      52.     /** 
      53.      * 当wifi不能访问网络时,mobile才会起作用 
      54.      * @return GPRS是否连接可用 
      55.      */  
      56.     public boolean isMobileConnected() {  
      57.   
      58.         NetworkInfo mMobile = connManager  
      59.                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
      60.   
      61.         if (mMobile != null) {  
      62.             return mMobile.isConnected();  
      63.         }  
      64.         return false;  
      65.     }  
      66.   
      67.     /** 
      68.      * GPRS网络开关 反射ConnectivityManager中hide的方法setMobileDataEnabled 可以开启和关闭GPRS网络 
      69.      *  
      70.      * @param isEnable 
      71.      * @throws Exception 
      72.      */  
      73.     public void toggleGprs(boolean isEnable) throws Exception {  
      74.         Class<?> cmClass = connManager.getClass();  
      75.         Class<?>[] argClasses = new Class[1];  
      76.         argClasses[0] = boolean.class;  
      77.   
      78.         // 反射ConnectivityManager中hide的方法setMobileDataEnabled,可以开启和关闭GPRS网络  
      79.         Method method = cmClass.getMethod("setMobileDataEnabled", argClasses);  
      80.         method.invoke(connManager, isEnable);  
      81.     }  
      82.   
      83.     /** 
      84.      * WIFI网络开关 
      85.      *  
      86.      * @param enabled 
      87.      * @return 设置是否success 
      88.      */  
      89.     public boolean toggleWiFi(boolean enabled) {  
      90.         WifiManager wm = (WifiManager) context  
      91.                 .getSystemService(Context.WIFI_SERVICE);  
      92.         return wm.setWifiEnabled(enabled);  
      93.   
      94.     }  
      95.       
      96.     /** 
      97.      *  
      98.      * @return 是否处于飞行模式 
      99.      */  
      100.     public boolean isAirplaneModeOn() {    
      101.         // 返回值是1时表示处于飞行模式    
      102.         int modeIdx = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);    
      103.         boolean isEnabled = (modeIdx == 1);  
      104.         return isEnabled;  
      105.     }    
      106.     /** 
      107.      * 飞行模式开关 
      108.      * @param setAirPlane 
      109.      */  
      110.     public void toggleAirplaneMode(boolean setAirPlane) {    
      111.         Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, setAirPlane ? 1 : 0);    
      112.         // 广播飞行模式信号的改变,让相应的程序可以处理。    
      113.         // 不发送广播时,在非飞行模式下,Android 2.2.1上测试关闭了Wifi,不关闭正常的通话网络(如GMS/GPRS等)。    
      114.         // 不发送广播时,在飞行模式下,Android 2.2.1上测试无法关闭飞行模式。    
      115.         Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);    
      116.         // intent.putExtra("Sponsor", "Sodino");    
      117.         // 2.3及以后,需设置此状态,否则会一直处于与运营商断连的情况    
      118.         intent.putExtra("state", setAirPlane);    
      119.         context.sendBroadcast(intent);    
      120.     }  

  • 相关阅读:
    Android GzipOutputStream、GzipInputStream用法
    JAVA中String类的intern()方法的作用
    Android中解析XML
    Android 实现Xmpp工具类
    Android 用SSL构建安全的Socket
    Android ReentrantLock
    ReentrantLock与synchronized
    Android 使用MediaMetadataRetriever类获取视频第一帧及用法
    Android 关于android布局的两个属性dither和tileMode
    Hadoop MapReduce编程 API入门系列之倒排索引(二十四)
  • 原文地址:https://www.cnblogs.com/weixiao870428/p/3765352.html
Copyright © 2011-2022 走看看