Android之Wifi开发

本文主要介绍android与wifi交互的一些应用技巧。常见的场景有:检测wifi,连接wifi,打开wifi设置,检测wifi网络变化,只允许wifi网络下载,获取wifi名称,检测网速等。
wifi检测并提示打开Wi-Fi系统设置
普及下基本知识:

1.WiFi的五种状态

    WifiManager.WIFI_STATE_DISABLED: //不可用
    WifiManager.WIFI_STATE_DISABLING://正在关闭或者断开
    WifiManager.WIFI_STATE_ENABLED://可用
    WifiManager.WIFI_STATE_ENABLING://正在打开或者连接
    WifiManager.WIFI_STATE_UNKNOWN://未知

2.需要注册的权限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><!-- 允许程序改变网络状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--允许程序访问WIFI网络状态信息  -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 允许程序改变WIFI状态 -->
<uses-permission android:name="android.permission.INTERNET"/><!-- 允许程序访问网络-->

3.判断是否为wifi网络

 /*** 判断是wifi网络,wifi就可以建议下载或者在线播放。
 */
public static boolean isWifi(Context context) {
    ConnectivityManager cm =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
   NetworkInfo networkInfo=cm.getActiveNetworkInfo();
if (networkInfo != null&& networkInfo.getType()==ConnectivityManager.TYPE_WIFI) {
       return true;
   }
   return false;
}

4.获取wifi的名称

public static String getCurrentWifiName(Context context) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        String ssid = wifiInfo != null ? wifiInfo.getSSID() : "";
        return ssid.replace("\"","").replace("<unknown ssid>","");//返回的字符串有双引号,要去掉
    }

5.判断wifi的状态(是否开启)

 //判断wifi的状态是否开启
    public static boolean checkWifiState(Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo.State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
        if (state== NetworkInfo.State.DISCONNECTED||state== NetworkInfo.State.DISCONNECTING){
            LogUtils.debug("wifi closed ");
            return false;
        }else{
            LogUtils.debug("wifi connected ");
            return true;
        }
    }

6.判断wifi是否连接


    //判断wifi是否isConnected的有效方式
    public boolean isWiFiActive(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] infos = connectivity.getAllNetworkInfo();
            if (infos != null) {
                for (NetworkInfo ni : infos) {
                    if (ni.getTypeName().equals("WIFI") && ni.isConnected()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

7.获取wifi网络对应的IP地址

// 得到本机在局域网中的IP
    public static String getLocalIP(Context context) {
        if (context==null){
            return "";
        }
        WifiManager wifiService = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiinfo = wifiService.getConnectionInfo();
        int ip = wifiinfo.getIpAddress();
        if (ip==0){
            return "";
        }
        //获取到的ip地址是一串数字,需要转化成标准格式
        String ip_address = intToIp(ip);
        return ip_address;
    }

    //转换为IP地址格式
    public static String intToIp(int i) {
        return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
                + "." + (i >> 24 & 0xFF);
    }

8.打开wifi系统设置界面

    //打开wifi系统设置界面
    public static void openWifiConfig(Activity activity, int requestCode) {
        Intent intent = null;
        if (android.os.Build.VERSION.SDK_INT > 10) {
            // 3.0以上打开设置界面,直接用ACTION_WIRELESS_SETTINGS打开到wifi系统设置界面
            intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
        } else {
            intent = new Intent();
            ComponentName component = new ComponentName(
                    "com.android.settings",
                    "com.android.settings.WirelessSettings");
            intent.setComponent(component);
            intent.setAction("android.intent.action.VIEW");
        }
        if (requestCode<0){
            activity.startActivity(intent);//后续不做处理
        }else {
            activity.startActivityForResult(intent, requestCode);//返回原来界面后做相应处理
        }
    }

9.通过wifi与智能硬件交互

本质上和普通wifi网络没有差别,一般需要将当前所连接的wifi IP地址最后的那段改为1,即为server的服务地址。视情况而定,比如:

   /**
     * 根据本机IP,获取当前serve访问地址
     */
    public static String formatIPAddress(String ip_address) {
        try{
            if (ip_address!=null&&!"".equals(ip_address)) {
                ip_address = ip_address.substring(0, ip_address.lastIndexOf("."));
                ip_address = "http://" + ip_address + ".1:8080/";//当前server地址
            }
        }catch (Exception e) {
            LogUtils.debug(e.toString());
        }
        return ip_address;
    }

欢迎交流,未完待续!

更多精彩,访问Dusan’s blog :duqian.site

Dusan_杜乾:Q:291902259,公众号:OpenDeveloper
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值