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

 

  

原文地址:https://www.cnblogs.com/mark0812/p/6087792.html