Android网络状态判断与处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android网络状态判断与处理相关的知识,希望对你有一定的参考价值。

参考技术A 在项目的开发过程中 , 我们的应用程序都是在有网络的情况下进行处理的 , 但我们也要考虑到在没有网络的情况下,应用会出现什么样的情况 , 所以我们需要获取到当前的网络信息.

获取网络信息需要在androidManifest.xml文件中加入相应的权限。

1)判断是否有网络连接

2)判断WIFI网络是否可用

3)判断MOBILE网络是否可用

4)获取当前网络连接的类型信息

在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。

当我们要在程序中监听网络状态时,只要一下几个步骤即可:

1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观

2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:

3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:

很多朋友在android开发中,都会遇到手机网络类型判断,因为就目前的android平台手机来说:可能会存在4种状态:

这四种状态,如果没有网络,肯定是无法请求Internet了,如果是wap就需要为手机添加中国移动代理.
下面是网络判断的方法:

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

最后总结:
工具类:

BaseActivity:

MainActivity

Log日志

android——判断网络状态

平常我们玩qq的时候我们没联网 ,qq上面回显示“网络连接不给力,请检查网络连接”那么它是 通过什么方式判断网络是否连接的呢?
下面将写个案例展示如何检查网络连接状态的
由于我们这里只是测试下所以我们的项目只是简单的实现点击一个按钮判断设备网络是否连接如果 网络已连接则弹出一个消息框提示“网络通畅”反之则提示“您的网络真的连接 了吗”


1.新建一个android项目textNet(设备版本为4.4.2)
2.打开activity_main.xml 添加一个按钮
3.打开MainActivity.java 用匿名内部类为按钮添加一个点击事件
注:不建议使用匿名内部类 如果事件过多会很乱,做好到同一包下建一个类去实现方便修改

项目代码如下:

package com.example.internet;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends Activity {
    private ConnectivityManager con;
    private boolean wifi;
    private boolean internet;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //获得句柄
        Button btn1 = (Button) this.findViewById(R.id.button1);
        
        //匿名内部类实现点击事件
        btn1.setOnClickListener(new OnClickListener(){
            
            public void onClick(View v) { //建议不使用匿名内部类,
                //这里加try catch是为了防止设备没给权限二停止运行影响用户体验,
                try {
                    //监视网络连接状态
                    con=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_SERVICE);      
                    //getNetworkinfo  获取指定网络连接类型的信息
                    wifi=con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();  
                    internet=con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
                PackageManager pm = getPackageManager(); 
                //判断是否有权限
                boolean permission = (PackageManager.PERMISSION_GRANTED ==   
                        pm.checkPermission("android.permission.ACCESS_NETWORK_STATE", "com.example.internet"));  
                   
                if (permission) {  
                    
                    if(wifi | internet){  
                        //土司    弹框显示
                        Toast.makeText(MainActivity.this,  
                                "网络通畅", Toast.LENGTH_LONG)  
                                .show(); 
                    }else{  
                        Toast.makeText(MainActivity.this,   
                                "亲,网络连了么?", Toast.LENGTH_LONG)  
                                .show();  
                    } 
                    
                }else {  
                    //如果没权限则提示
                    Toast.makeText(MainActivity.this,   
                            "请打开相关网络状态权限,方便使用", Toast.LENGTH_LONG)  
                            .show();  
                }  
            }
            
        });
    }

 

 

 

注:权限清单方法

  

try {  
            PackageInfo pack = pm.getPackageInfo("packageName",PackageManager.GET_PERMISSIONS);</span>  
            String[] permissionStrings = pack.requestedPermissions;  
            showToast("权限清单--->" + permissionStrings.toString());  
        } catch (NameNotFoundException e) {  
            e.printStackTrace();  
        }  

 

这里转载一份权限表:

  1. http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html

 

  

 












以上是关于Android网络状态判断与处理的主要内容,如果未能解决你的问题,请参考以下文章

android -------- WIFI 详解

android——判断网络状态

Android检测网络状态,判断当前网络是否可用

Android判断网络状态

Android究竟是如何判断是不是在线的?

android当前网络连接类型判断