网络权限,3)判断MOBILE网络是还是不是可用

前言#

世家好,大约有一个多月没有立异博客了,我是为啥去了吧?很明确,程序员当然要突击……那四次跟我们分享一下新品类的片段经验。

监听网络生成在支付中是不时应用的,例如大家断网有局地祥和的唤起,或者依照分歧的网络转移一些加载策略,例如wifi看视频,非wifi则会有一个唤起,还有极个别更恶心的偷摸的在后台给您下各个安装包,是哪个人我就不一一列举了。

在5.0原先,我们都是广播布罗德castReceiver,注册跟网络转移有关的广播,然后判断是连连仍旧断开,这种做法越发便于,可是随着安卓的版本迭代,在权力上越发小心,广播的方法就显示不太优雅。

打个比方,从前就是拿个大喇叭,在马路上各类喊,就如同逛地摊,各个货品的吆喝声混在同步,必要你协调去辨别哪些是您想要的音信,而且又显得很不安全,万一卖的货色比较隐私吗,大家都是很低调的人。

于是在安卓5.0上述终于对网络的监听举行了优化,那就是透过Callback回调的不二法门,那种支付情势是否很常用?例如监听下载进度,我只需求多个回调:下载成功,下载战败,下载的速度变化,那种回调情势针对性强,耦合性低,非常便利,和播放相比,就象是我们是一个订购了劳动,要求的事物自动上门,very
good。

废话铺垫了那样多,上面就是一个实战demo。

平昔反编译,咱来看看那个权限干啥的

赢得网络信息须要在AndroidManifest.xml文件中进入相应的权杖。

正文#

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        // 请注意这里会有一个版本适配bug,所以请在这里添加非空判断
        if (connectivityManager != null) {
            connectivityManager.requestNetwork(new NetworkRequest.Builder().build(), new ConnectivityManager.NetworkCallback() {

                /**
                 * 网络可用的回调
                 * */
                @Override
                public void onAvailable(Network network) {
                    super.onAvailable(network);
                    Log.e("lzp", "onAvailable");
                }

                /**
                 * 网络丢失的回调
                 * */
                @Override
                public void onLost(Network network) {
                    super.onLost(network);
                    Log.e("lzp", "onLost");
                }

                /**
                 * 当建立网络连接时,回调连接的属性
                 * */
                @Override
                public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
                    super.onLinkPropertiesChanged(network, linkProperties);
                    Log.e("lzp", "onLinkPropertiesChanged");
                }

                /**
                 *  按照官方的字面意思是,当我们的网络的某个能力发生了变化回调,那么也就是说可能会回调多次
                 *
                 *  之后在仔细的研究
                 * */
                @Override
                public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
                    super.onCapabilitiesChanged(network, networkCapabilities);
                    Log.e("lzp", "onCapabilitiesChanged");
                }

                /**
                 * 在网络失去连接的时候回调,但是如果是一个生硬的断开,他可能不回调
                 * */
                @Override
                public void onLosing(Network network, int maxMsToLive) {
                    super.onLosing(network, maxMsToLive);
                    Log.e("lzp", "onLosing");
                }

                /**
                 * 按照官方注释的解释,是指如果在超时时间内都没有找到可用的网络时进行回调
                 * */
                @Override
                public void onUnavailable() {
                    super.onUnavailable();
                    Log.e("lzp", "onUnavailable");
                }

            });
        }
    }
}

}

这就是昨天的全套代码了,上边已经有了响应的笺注,不过仍然不够方便大家掌握,接下去就仔细的钻研一下:

1、首先大家开拓app,此时网络是两次三番的动静:

image

一打开demo,大家立时就取得了onAvailable的回调,意思就是网络方今可用,这点比广播强多了,因为我们已开行还要单独处理一遍,而由此回调的艺术,可以即刻得到当前的事态。

2、然后大家手动关闭网络:

image

嗬?没有onLosing的回调,只看到了onLost,表达我们手动关闭网络连接是一个很粗鲁的行为,就如官方注释上写的,固然是一个平板的断开,他可能不回调。

3、最终大家重新连接网络:

image

这一次的回调就比较多了,首先是onAvailable,展现网络可用,然后是onCapabilitiesChanged,说此时网络的接二连三能力爆发了第二回变动,推断是连连中把,再然后是onLinkPropertiesChanged,表明连接的属性已经发出了扭转,此时理应得到了ip地址等消息,最终又回调了onCapabilitiesChanged,那么相应是网络速度到可用的景况。

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

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

总结#

本人未曾模拟出onLosing和onUnavailable的境况,至少注解她们的产出的几率现在早已不高了,大家早就因此注释简单明了了他们的风貌,这里就不做深切钻研了。

因而刚才的试行,大家得出了一晃结论:

1、要想监听网络的连接和断开,应该在onAvailable和onLost中,他们自然会成对出现。

2、其余的多少个回调使用境况会少一点,并且onCapabilitiesChanged会回调多次,所以利用它时大家要慎重,幸免重复的操作,不过足以确保最终两回回调,网络的一连一定是接连成功的。

OK,从那一个小小的的变更,大家看到了安卓在逐步变得更好,使用起来更简洁更优雅,那也加大了几许素质低的厂商想尽办法后台干点坏事的行为。

后天就到此处,有怎样问题大家一块留言探究~

网络权限,添加后可以联网,那条健康,忽略

1)判断是或不是有网络连接

补充#

1、记得申请权限:
<uses-permission
android:name=”android.permission.CHANGE_NETWORK_STATE” />
<uses-permission android:name=”android.permission.WRITE_SETTINGS”
/>
尤其是WRITE_SETTINGS,那几个须求手动申请,千万别忘了。

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

public boolean isNetworkConnected(Context context) {  
      if (context != null) {  
         ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  
         if (mNetworkInfo != null) {  
             return mNetworkInfo.isAvailable();  
        }  
      }  
     return false;  
 }  

网络状态,比如是用WIFI依然4G,考虑到有检查流量下不播放,那条暂且认为正常,当然不消除收集网络大数目标也许,要挟程度1

2)判断WIFI网络是或不是可用

    <uses-permission
android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

  public boolean isWifiConnected(Context context) {      if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mWiFiNetworkInfo = mConnectivityManager                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
         if (mWiFiNetworkInfo != null) {  
              return mWiFiNetworkInfo.isAvailable();
  } 
 } 
     return false; 
}  

写外置存储,在国有存储里拉屎,别家也如此干,还算正常吗,不过那很显眼不吻合谷歌着重的正经,反人类程度1

3)判断MOBILE网络是或不是可用

    <uses-permission
android:name=”android.permission.READ_PHONE_STATE”/>

public boolean isMobileConnected(Context context) {      if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mMobileNetworkInfo = mConnectivityManager                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
          if (mMobileNetworkInfo != null) {  
             return mMobileNetworkInfo.isAvailable(); 
           } 
         }     
       return false;
  } 

读取手机新闻,包括IMEI等,有窃取隐衷疑虑,也恐怕是用来安全检测,威逼程度1

4)获取当前网络连接的类型新闻

    <uses-permission
android:name=”android.permission.WAKE_LOCK”/>

 public static int getConnectedType(Context context) {     
 if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();         
       if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {             
             return mNetworkInfo.getType();         
         }  
    }      
  return -1;  
}  

唤醒锁,让你手机无法休眠,疯狂掉电,不吻合后台纯净标准,反人类程度2

在开发android应用时,涉及到要举行网络访问,时常必要开展网络状态的自我批评,以提须求用户须要的指示。一般可以通过ConnectivityManager来形成该工作。

    <uses-permission
android:name=”android.permission.SYSTEM_ALERT_WINDOW”/>

ConnectivityManager有多少个根本义务:

悬浮窗,可用以干正事也可用以弹广告,此外该权限已有绕过办法,可参看这篇小说

1、监听手机网络状态(包蕴GPRS,WIFI, UMTS等)

    <uses-permission android:name=”android.permission.CAMERA”/>

2、手机状态爆发变更时,发送广播

照相机权限,可以拍摄,考虑到有扫二维码功效,暂且认为正常,但是也见过用扫码为关键申请权限然后偷拍的恶意APP,要挟程度1

3、当一个网络连接失利时展开故障切换

    <uses-permission
android:name=”android.permission.RECORD_AUDIO”/>

4、为应用程序提供可以取得可用网络的高精度和粗劣的情状

录音?????怀疑,威迫程度2

当我们要在先后中监听网络状态时,只要一下多少个步骤即可:

    <uses-permission
android:name=”android.permission.ACCESS_WIFI_STATE”/>

1、定义一个Receiver重载其中的onReceive函数,在里边完毕所须要的效用,如依据WIFI和GPRS是还是不是断开来改变空间的外观

翻开WIFI音讯,比如连了哪个WIFI等等,可能偷偷上传WIFI音信,要挟程度2

connectionReceiver = new BroadcastReceiver() {

   @Override public void onReceive(Context context, Intent intent) {
    ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
     Log.i(TAG, "unconnect"); // unconnect network
     }else { // connect network
 }
   }
  };

    <uses-permission
android:name=”android.permission.READ_EXTERNAL_STORAGE”/>

2、在适合的地点注册Receiver,能够在程序中登记,在onCreate中调用如下函数即可:

读外部存储,合营写入一起用,一般那俩分不开,在原生安卓授权时一律展现为存储空间

IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
  registerReceiver(connectionReceiver, intentFilter);

    <uses-permission
android:name=”android.permission.READ_LOGS”/>

3、在卓殊时打消注册Receiver,可以在程序中收回,在onDestroye中调用如下函数即可:

读系统日志,纵然说或许是为了修bug,不过不清除读取其他app的日志一并上传,而QQ会多量输出日志,所以这么些权力依旧有早晚风险,恐吓程度1

if (connectionReceiver != null) {
   unregisterReceiver(connectionReceiver);
  }

    <uses-permission
android:name=”android.permission.ACCESS_FINE_LOCATION”/>

Ps:还有为数不少有关选择TelephonyManager
的措施的,方法如下(不过自己试了少多次都有题目,如每趟第三次跻身一个Activity时会自动接到网络断开的信号,每一次网络状态改变时收到多次回调且状态不正确。不知道有怎么样要注意的地方,求指引!)

精确定位,你不是导航APP你要以此权力是或不是想干什么事情呀(此处应配表情包:小心自己十六进制定位三米范围去打你),威吓程度3

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

mTelephonyMgr.listen(new PhoneStateListener(){

@Override public void onDataConnectionStateChanged(int state) { 
switch(state){ 
case TelephonyManager.DATA_DISCONNECTED://网络断开

          break;
 case TelephonyManager.DATA_CONNECTING://网络正在连接

          break; 
case TelephonyManager.DATA_CONNECTED://网络连接上

         break;

              }
          }
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

    <uses-permission
android:name=”android.permission.ACCESS_COARSE_LOCATION”/>

关于第两种方法,本人并不曾去品尝过。第一种办法仍旧比较好用,假诺要先后隐藏在后台的话,指出开个service,将布罗德castReceiver注册在service,但并非忘了裁撤注册。

大体地点,获取城市怎么的,固然比较思疑,然而多数APP都在用,威迫程度1

在测试中相见过这么的情景,将一个脚下连日wifi的路由设备关闭,不过程序并没有捕捉到unconnect
network,可能是因为手机配备即刻连接另一个路由设备了。

    <uses-permission
android:name=”android.permission.GET_TASKS”/>

Android 监控网络状态

  public static boolean isNetworkAvailable(Context context) {          ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);          if (connectivity == null) {   
              Log.i("NetWorkState", "Unavailabel");   
              return false;   
          } else {              NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
             if (info != null) {   
                 for (int i = 0; i < info.length; i++) {                      if (info[i].getState() == NetworkInfo.State.CONNECTED) {                          Log.i("NetWorkState", "Availabel");                          return true; 
                   } 
                 } 
             } 
       } 
         return false; 
}  

地点这么些艺术就是判断网络是不是连接的代码,重回true表示有网络,再次回到false表示无网络。
在Android网络应用程序开发中,平时要认清网络连接是还是不是可用,由此常常有必不可少监听网络状态的变动。android的网络状态监听能够用布罗德(Broad)castReceiver来接收网络状态改变的广
播,具体贯彻如下:

 @Override   
  public void onReceive(Context context, Intent intent) { 
 Log.e(TAG, "网络状态改变");   

  boolean success = false;   

  //获得网络连接服务 
 ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
 // State state = connManager.getActiveNetworkInfo().getState(); 
 State state = connManager.getNetworkInfo(  ConnectivityManager.TYPE_WIFI).getState(); // 获取网络连接状态 
 if (State.CONNECTED == state) { // 判断是否正在使用WIFI网络 
 success = true;  
          }    
 state = connManager.getNetworkInfo(  ConnectivityManager.TYPE_MOBILE).getState(); // 获取网络连接状态 
 if (State.CONNECTED != state) { // 判断是否正在使用GPRS网络 
 success = true; 
           }    
 if (!success) {  Toast.makeText(LocationMapActivity.this, "您的网络连接已中断", Toast.LENGTH_LONG).show(); 
           }    
 } 

在Activity的onCreate中:

//注册网络监听 
IntentFilter filter = new IntentFilter();    
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);   
registerReceiver(mNetworkStateReceiver, filter); //在Activity中的onDestroy中:' 
 unregisterReceiver(mNetworkStateReceiver); //取消监听 

重重有情人在android开发中,都会赶上手机网络项目判断,因为就当前的android平台手机来说:可能会存在4中状态

  1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)

  2.使用WIFI上网

  3.CMWAP(中国移动代理)

  4.CMNET上网

这四种情景,若是没有网络,肯定是无法请求Internet了,固然是wap就必要为手机拉长中国联通代理,关于为手机增加中国联通的代办,请到

http://www.2cto.com/kf/201111/112100.html
那里写有关于添加中国联通代理的例证!
下边是网络判断的点子:

 /**

  * @author sky 4 
  * 获取当前的网络状态  -1:没有网络  1:WIFI网络2:wap网络3:net网络  
 * @param context  
 * @return
   */ 
     public static int getAPNType(Context context){  
         int netType = -1;  
         ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
         NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();  


         if(networkInfo==null){  
             return netType;  
}  
         int nType = networkInfo.getType();  
         if(nType==ConnectivityManager.TYPE_MOBILE){  
             Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());  
             if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){ 
                 netType = CMNET;  
 }  
             else{  
                 netType = CMWAP;  
 }  
 }  
         else if(nType==ConnectivityManager.TYPE_WIFI){  
             netType = WIFI;  
 }  
         return netType;  
     } 

因为获取的是服务对象,所以这一个网络状态都是每日刷新的,所以我们只要求取得网络状态就可以了!

学习在于积累,希望和豪门一块儿享受

探望你在运转什么职责,结合大数目解析可以精确推送广告,恐吓程度1

Android网络连接判断与拍卖

收获网络音信需求在AndroidManifest.xml文件中进入相应的权柄。

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

1)判断是或不是有网络连接

  public boolean isNetworkConnected(Context context) { 2    if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();          if (mNetworkInfo != null) {  
              return mNetworkInfo.isAvailable();          }  
  }     return false;  }  

2)判断WIFI网络是不是可用

 public boolean isWifiConnected(Context context) {      if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mWiFiNetworkInfo = mConnectivityManager                 .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
          if (mWiFiNetworkInfo != null) {  
              return mWiFiNetworkInfo.isAvailable();  

            } 
         }      
      return false; 
 } 

3)判断MOBILE网络是还是不是可用

  public boolean isMobileConnected(Context context) {     

 if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mMobileNetworkInfo = mConnectivityManager                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
          if (mMobileNetworkInfo != null) {  
              return mMobileNetworkInfo.isAvailable(); 
 } 
 }  
    return false; 
 }  

4)获取当前网络连接的类型音讯

 public static int getConnectedType(Context context) {     
if (context != null) {  
          ConnectivityManager mConnectivityManager = (ConnectivityManager) context                  .getSystemService(Context.CONNECTIVITY_SERVICE);  
          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();        
  if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {            
  return mNetworkInfo.getType();         
               }  
          }      
    return -1; 
 }  

在开发android应用时,涉及到要举行网络访问,时常要求开展网络状态的自我批评,以提需求用户要求的升迁。一般能够通过ConnectivityManager来达成该工作。

ConnectivityManager有七个首要义务:

1、监听手机网络状态(包罗GPRS,WIFI, UMTS等)

2、手机状态爆发变更时,发送广播

3、当一个网络连接失利时开展故障切换

4、为应用程序提供可以得到可用网络的高精度和粗劣的情景

当大家要在先后中监听网络状态时,只要一下多少个步骤即可:

1、定义一个Receiver重载其中的onReceive函数,在其间完结所必要的功效,如基于WIFI和GPRS是或不是断开来改变空间的外观

connectionReceiver = new BroadcastReceiver() {

   @Override public void onReceive(Context context, Intent intent) {
    ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
     Log.i(TAG, "unconnect"); // unconnect network
     }else { // connect network
 }
   }
  };

2、在合适的地点注册Receiver,可以在先后中注册,在onCreate中调用如下函数即可:

IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
  registerReceiver(connectionReceiver, intentFilter);

3、在适用时裁撤注册Receiver,可以在先后中收回,在onDestroye中调用如下函数即可:

if (connectionReceiver != null) {
   unregisterReceiver(connectionReceiver);
  }

Ps:还有众多有关使用TelephonyManager
的法门的,方法如下(不过本人试了某些次都有题目,如每回第五回跻身一个Activity时会自动接到网络断开的信号,每一趟网络状态改变时收到很多次回调且状态不得法。不知道有啥样要注意的地方,求引导!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

mTelephonyMgr.listen(new PhoneStateListener(){

@Override public void onDataConnectionStateChanged(int state) { switch(state){ case TelephonyManager.DATA_DISCONNECTED://网络断开

break; case TelephonyManager.DATA_CONNECTING://网络正在连接

break; case TelephonyManager.DATA_CONNECTED://网络连接上

break;

}

}

}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

有关第三种格局,本人并不曾去品尝过。第一种方法依旧相比好用,若是要先后隐藏在后台的话,指出开个service,将布罗德(Broad)castReceiver注册在service,但绝不忘了撤回注册。

在测试中遇见过那样的风貌,将一个脚下两次三番wifi的路由设备关闭,不过程序并从未捕捉到unconnect
network,可能是因为手机设备立即连接另一个路由设备了。

    <uses-permission
android:name=”android.permission.GET_ACCOUNTS”/>

Android 监控网络状态

 public static boolean isNetworkAvailable(Context context) {      
    ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);          if (connectivity == null) {   
              Log.i("NetWorkState", "Unavailabel");   
              return false;   
          } else {              NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
             if (info != null) {   
                  for (int i = 0; i < info.length; i++) { 
                     if (info[i].getState() == NetworkInfo.State.CONNECTED) {                          Log.i("NetWorkState", "Availabel"); 
                         return true; 13 } 14 } 15 } 16 } 
         return false; 
     }  

地方这么些措施就是判断网络是或不是连接的代码,再次回到true表示有网络,重返false表示无网络。
在Android网络应用程序开发中,日常要认清网络连接是或不是可用,由此常常有必不可少监听网络状态的变通。android的网络状态监听可以用布罗德(Broad)castReceiver来接收网络状态改变的广
播,具体贯彻如下:

  @Override   
  public void onReceive(Context context, Intent intent) { 
 Log.e(TAG, "网络状态改变");   

  boolean success = false;   

  //获得网络连接服务 
  ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
 // State state = connManager.getActiveNetworkInfo().getState(); 
 State state = connManager.getNetworkInfo(  ConnectivityManager.TYPE_WIFI).getState(); // 获取网络连接状态 
 if (State.CONNECTED == state) { // 判断是否正在使用WIFI网络 
 success = true; 
 }    
 state = connManager.getNetworkInfo(  ConnectivityManager.TYPE_MOBILE).getState(); // 获取网络连接状态 
 if (State.CONNECTED != state) { // 判断是否正在使用GPRS网络 
 success = true;  
}    
 if (!success) { 
 Toast.makeText(LocationMapActivity.this, "您的网络连接已中断", Toast.LENGTH_LONG).show(); 
 }    
 }  

在Activity的onCreate中:

//注册网络监听 
IntentFilter filter = new IntentFilter();    
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);   
registerReceiver(mNetworkStateReceiver, filter); //在Activity中的onDestroy中:' 
 unregisterReceiver(mNetworkStateReceiver); //取消监听 

成百上千有情人在android开发中,都会遇上手机网络项目判断,因为就近来的android平台手机来说:可能会设有4中状态

  1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)

  2.使用WIFI上网

  3.CMWAP(中国移动代理)

  4.CMNET上网

那四种情景,若是没有网络,肯定是不能请求Internet了,即使是wap就需求为手机拉长中国电信代理,关于为手机增进中国电信的代办,请到

http://www.2cto.com/kf/201111/112100.html
那里写有关于添加中国电信代理的例证!

下边是网络判断的办法:

  /**
  * @author sky 4 
  * 获取当前的网络状态  -1:没有网络  1:WIFI网络2:wap网络3:net网络 10 
 * @param context  
 * @return

   */ 

     public static int getAPNType(Context context){  
         int netType = -1;  
         ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
         NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();  


         if(networkInfo==null){  
             return netType;  
 }  
         int nType = networkInfo.getType();  
         if(nType==ConnectivityManager.TYPE_MOBILE){  
             Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());  
             if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){  
                 netType = CMNET;  
}  
             else{  
                 netType = CMWAP;  
 }  
 }  
         else if(nType==ConnectivityManager.TYPE_WIFI){  
             netType = WIFI;  
 }  
         return netType;  
     } 

因为获取的是劳务目的,所以那么些网络状态都是时刻刷新的,所以大家只须要得到网络状态就足以了!

探访您登陆了吗账号,可能会读取到墨迹天气那种疯狂加账号的毒瘤,威迫程度2

    <uses-permission
android:name=”android.permission.SET_DEBUG_APP”/>

设置调试APP,小叔子你那是视频或者调试器啊,反人类程度2

    <uses-permission
android:name=”android.permission.USE_CREDENTIALS”/>

呼吁验证账户管理器,这些权力很少见,威吓程度暂定1

    <uses-permission
android:name=”android.permission.MANAGE_ACCOUNTS”/>

管制账号,相比正常

    <uses-permission
android:name=”com.android.launcher.permission.INSTALL_SHORTCUT”/>

给您一堆神速形式包邮到桌面

    <uses-permission
android:name=”android.permission.AUTHENTICATE_ACCOUNTS”/>

以此权力在23版本的API上撇下了,而快视频的SDKVERSION是22,两者联手验证了哪些自己想自己绝不说都了解

    <uses-permission
android:name=”android.permission.WRITE_SYNC_SETTINGS”/>

写入同步设置,用于借助同步唤醒,反人类程度1

    <uses-permission
android:name=”android.permission.READ_SYNC_SETTINGS”/>

读取同步设置,用途同上

    <uses-permission
android:name=”android.permission.RECEIVE_BOOT_COMPLETED”/>

接受开机启动已毕播放,合营一个receiver,开机先吃掉你的内存

    <uses-permission
android:name=”android.permission.DISABLE_KEYGUARD”/>

禁用屏幕锁定, 有点不健康,反人类程度1

    <uses-permission
android:name=”android.permission.PACKAGE_USAGE_STATS”/>

选取包使用计算,怕是要大数据解析,勒迫程度1

    <uses-permission
android:name=”com.sec.android.provider.badge.permission.READ”/>

    <uses-permission
android:name=”com.sec.android.provider.badge.permission.WRITE”/>

那两条权限针对IPhone,给图标加个角标,逼死恐怖症专用

    <uses-permission
android:name=”com.htc.launcher.permission.READ_SETTINGS”/>

    <uses-permission
android:name=”com.htc.launcher.permission.UPDATE_SHORTCUT”/>

    <uses-permission
android:name=”com.sonyericsson.home.permission.BROADCAST_BADGE”/>

    <uses-permission
android:name=”com.sonymobile.home.permission.PROVIDER_INSERT_BADGE”/>

    <uses-permission
android:name=”com.anddoes.launcher.permission.UPDATE_COUNT”/>

    <uses-permission
android:name=”com.majeur.launcher.permission.UPDATE_BADGE”/>

    <uses-permission
android:name=”com.huawei.android.launcher.permission.CHANGE_BADGE”/>

    <uses-permission
android:name=”com.huawei.android.launcher.permission.READ_SETTINGS”/>

    <uses-permission
android:name=”com.huawei.android.launcher.permission.WRITE_SETTINGS”/>

    <uses-permission
android:name=”android.permission.READ_APP_BADGE”/>

    <uses-permission
android:name=”com.oppo.launcher.permission.READ_SETTINGS”/>

    <uses-permission
android:name=”com.oppo.launcher.permission.WRITE_SETTINGS”/>

一堆启动器的权位,幸好放过了琴梨梨的巨硬桌面,各位用nova和total的也得以临时放心,没针对到你们

    <uses-permission
android:name=”me.everything.badger.permission.BADGE_COUNT_READ”/>

    <uses-permission
android:name=”me.everything.badger.permission.BADGE_COUNT_WRITE”/>

不明权限,如果有大佬知道记得告诉琴梨梨一声

    <uses-permission
android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>

挂载/裁撤挂在文件系统,一般文件管理器会用到,可是你是个视频APP啊,就算并不会漏风隐衷就是了,反人类程度1

    <uses-permission
android:name=”android.permission.BIND_JOB_SERVICE”/>

后台保活,拳打脚踢粉红色守护

    <uses-permission
android:name=”android.permission.WRITE_SETTINGS”/>

修改设置,比如突然给您亮度改最低什么的

    <uses-permission
android:name=”android.permission.FLASHLIGHT”/>

闪光灯,一般是相机/手电筒APP需求,不败露风声隐衷

    <uses-permission android:name=”android.permission.VIBRATE”/>

感动,把你的手机成为加♂湿器,不败露风声隐衷

    <uses-permission
android:name=”android.permission.ACCESS_NOTIFICATION_POLICY”/>

6.0加入的新权力,读取布告规则

    <uses-permission
android:name=”android.permission.BIND_NOTIFICATION_LISTENER_SERVICE”/>

劳务可以接过音讯

    <uses-permission
android:name=”android.permission.BROADCAST_PACKAGE_ADDED”/>

    <uses-permission
android:name=”android.permission.BROADCAST_PACKAGE_CHANGED”/>

    <uses-permission
android:name=”android.permission.BROADCAST_PACKAGE_INSTALL”/>

    <uses-permission
android:name=”android.permission.BROADCAST_PACKAGE_REPLACED”/>

当仁不让发送安装卸载APP的广播,合作其余APP的照应receiver,成功唤醒一片

    <uses-permission
android:name=”android.permission.RESTART_PACKAGES”/>

重启APP,一般用于重启APP生效新的安装,不驾驭快视频要以此权力干什么,反人类程度1

    <uses-permission
android:name=”android.permission.CHANGE_NETWORK_STATE”/>

更改网络状态,有早晚破坏性,胁迫程度2

    <uses-permission
android:name=”com.lightsky.video.permission.MIPUSH_RECEIVE”/>

    <permission
android:name=”com.lightsky.video.permission.MIPUSH_RECEIVE”
android:protectionLevel=”signatureOrSystem”/>

    <uses-permission
android:name=”com.lightsky.video.MIPUSH_RECEIVE”/>

三个中兴推送权限,针对MIUI多量推送垃圾新闻

    <permission
android:name=”com.lightsky.video.permission.JPUSH_MESSAGE”
android:protectionLevel=”signature”/>

    <uses-permission
android:name=”com.lightsky.video.permission.JPUSH_MESSAGE”/>

极光推送SDK权限

    <uses-permission
android:name=”android.permission.RECEIVE_USER_PRESENT”/>

用户唤醒机器,保活用

    <uses-permission
android:name=”android.permission.CHANGE_WIFI_STATE”/>

转移WIFI状态,比如您看那里有个满格的ChinaNet咱帮你用那么些权力连上吧,可用于主动连接钓鱼WIFI,胁制程度1

    <uses-permission
android:name=”android.permission.ACCESS_LOCATION_EXTRA_COMMANDS”/>

呼吁地点附加命令,导航APP常用权力,那里就有点威吓了,勒迫程度1

    <uses-permission
android:name=”android.permission.PROCESS_OUTGOING_CALLS”/>

拍卖呼出的电话,你给人家打电话也能被处理,威逼程度2

    <uses-permission
android:name=”android.permission.READ_CALENDAR”/>

读取日历,可能读取你的苦衷,勒迫程度2

    <uses-permission
android:name=”android.permission.WRITE_CALENDAR”/>

写入日历,帮您新建个事件如何的,可能污染日历事件,比如给你个半夜提示怎么样的

    <uses-permission
android:name=”android.permission.ACCESS_MTK_MMHW”/>

MTK平台的机器访问收音机,德州仪器和猎户座等任何平台设备不受影响请手动忽略

    <uses-permission android:name=”android.permission.BLUETOOTH”/>

蓝牙5.0,控制和蓝牙设备的连接,那条权限行使同时系统会问你是或不是打开蓝牙,请小心系统提醒

    <uses-permission
android:name=”android.permission.BLUETOOTH_ADMIN”/>

意识和配对蓝牙5.0设备,可以用于轻手轻脚向某个蓝牙5.0设备发送文书,也可用来选取蓝牙5.0与可穿戴设备通讯,要挟程度2

那一个权限里,固然一半是正常权限,然而剩下的权位确实过分了

最终给我们安利一下AppOps,轻松管理权限

相关文章