您的位置:首页 > 移动开发 > Android开发

Android 判断是否有网及无网处理

2016-08-19 10:43 260 查看
当我们开发时,为了提高用户的体验,常常要监测手机的网络状态,当手机处于无网状态时,我们会做一些相应的处理或者引导用户去打开网路,以下是我总结的一些经验,不足之处,还请谅解,如果有错误的地方,欢迎拍砖.(做了快两年的Android了,总觉得要做点什么,要不然感觉自己都在虚度了)


首先我们得自定义一个NetStateReceiver 继承extends  BroadcastReceiver

public class NetStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isNet = NetworkUtil.isConnected();
if (isNet) {
EventBus.getDefault().post(0, ConstantValue.Net_open);
}else
EventBus.getDefault().post(1, ConstantValue.Net_open);
}
}

这里我用的是org.simple.eventbus.EventBus 框架来更新事件,如果大家不熟悉可以使用广播,或者其他自己熟悉的方式:0代表现在网络是打开的,1代表没打开

当然我们还得在配置文件里面单独注册:

   <!--监听网络变化广播-->

        <receiver android:name=".common.network.NetStateReceiver">

            <intent-filter>

                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

            </intent-filter>

        </receiver>

当然这里还需注册网络操作权限:

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

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

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

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

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

当监测到没网时,我们可能需要引导用户去打开网络:

/*

    * 打开设置网络界面

    * */

    public static void setNetworkMethod(final Context context){

        //提示对话框

        AlertDialog.Builder builder=new AlertDialog.Builder(context);

        builder.setTitle("网络设置提示").setMessage("网络连接不可用,是否进行设置?").setPositiveButton("设置", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                // TODO Auto-generated method stub

                Intent intent=null;

                //判断手机系统的版本  即API大于10 就是3.0或以上版本

                if(android.os.Build.VERSION.SDK_INT>10){

                    intent = new Intent(android.provider.Settings.ACTION_SETTINGS);

                }else{

                    intent=new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);

//                    intent = new Intent();

//                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");

//                    intent.setComponent(component);

//                    intent.setAction("android.intent.action.VIEW");

                }

                context.startActivity(intent);

            }

        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                // TODO Auto-generated method stub

                dialog.dismiss();

            }

        }).show();

    }

当然一般我们打开一个activity的时候,可能首先会去监测是否有网:

boolean isNet = NetworkUtil.isConnected();
if (!isNet) {
NetworkUtil.getInstance().setNetworkMethod(this);
}

以下是NetworkUtil代码:

package com.jxhdc.aspire.jxhdcandroid.common.utils;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import com.jxhdc.aspire.jxhdcandroid.JXHDCApplication;

import org.simple.eventbus.EventBus;

/**
* 网络工具类
* Created by chenziqiang on 16/4/21.
*/
public class NetworkUtil {
private volatile static  NetworkUtil instance;

public NetworkUtil(){
instance=this;
}
public synchronized static NetworkUtil getInstance() {
if (instance == null) {
synchronized (NetworkUtil.class) {
instance = instance == null ? new NetworkUtil() : instance;
}
}
return instance;
}

public static boolean isConnected() {
Context context = JXHDCApplication.getContext();
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeInfo = manager.getActiveNetworkInfo();
if (activeInfo != null) {
return activeInfo.isConnected();
}
return false;
}
//    public static boolean isNetConnected() {
//        ConnectivityManager cm = (ConnectivityManager) JXHDCApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
//        NetworkInfo info = cm != null ? cm.getActiveNetworkInfo() : null;
//        return info != null && info.isConnected();
//    }

public static boolean isWifiConnected() {
boolean isConnected = false;
try {
ConnectivityManager cm = (ConnectivityManager) JXHDCApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
isConnected = info.isConnected();
} catch (Exception e) {
e.printStackTrace();
}
return isConnected;
}

public static boolean isMobileConnected() {
boolean isConnected = false;
try {
ConnectivityManager cm = (ConnectivityManager) JXHDCApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
isConnected = info.isConnected();
} catch (Exception e) {
e.printStackTrace();
}
return isConnected;
}

/*
* 打开设置网络界面
* */
AlertDialog.Builder builder=null;
public void setNetworkMethod(final Context context){
if (builder!=null){
builder.setCancelable(true);
}
//提示对话框
builder=new AlertDialog.Builder(context);
builder.setTitle("网络设置提示").setMessage("网络连接不可用,是否进行设置?").setPositiveButton("设置", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent=null;
//判断手机系统的版本  即API大于10 就是3.0或以上版本
if(android.os.Build.VERSION.SDK_INT>10){
intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
}else{
intent=new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
//                    intent = new Intent();
//                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
//                    intent.setComponent(component);
//                    intent.setAction("android.intent.action.VIEW");
}
context.startActivity(intent);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).show();
}
/**
* 网络异常提示界面
*/
public  void setNetworkAnomaly(final Context context){
//提示对话框
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("网络异常提示").setMessage("网络连接异常,请再试一次?").setPositiveButton("是", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
EventBus.getDefault().post("0","request_data");
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).show();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐