android wifi连接开发实例

Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等 下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等。 下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/WifiDemoWu csdn 下载地址 :https://download.youkuaiyun.com/download/wuqingsen1/1... 阅读详情

转自:http://blog.youkuaiyun.com/dianqiugg/article/details/8205613

参考网上代码,结合了自己的想法,废话不多说,直接上代码

1、布局文件:wifi_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <Button android:id="@+id/scan_button" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="扫描"
  android:textColor="#000000" />
 <TextView android:id="@+id/wifi_result_textview"
  android:layout_width="fill_parent" android:layout_height="wrap_content" />
</LinearLayout>
2、Activity:WifiActivity.java

/**
 * @Title: WifiActivity.java
 * @Package com.ly
 * @Description:
 * Copyright: Copyright (c) 2011
 * 
 * @date 2012-11-9 上午11:47:51
 * @version V1.0
 */

package com.android.activity;

import java.util.List;

import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.demo.R;
import com.android.util.WifiUtil;

/**
 * @ClassName: WifiActivity
 * @Description: TODO
 * @date 2012-11-9 上午11:47:51
 *
 */
public class WifiActivity extends BaseActivity implements OnClickListener
{

 private Button scan_button;

 private TextView wifi_result_textview;

 private WifiManager wifiManager;

 private WifiInfo currentWifiInfo;// 当前所连接的wifi

 private List<ScanResult> wifiList;// wifi列表

 private String[] str;

 private int wifiIndex;

 private ProgressDialog progressDialog;

 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.wifi_layout);
  wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  setupViews();
  initListener();
 }

 @Override
 protected void onResume()
 {
  openWifi();
  currentWifiInfo = wifiManager.getConnectionInfo();
  wifi_result_textview.setText("当前网络:" + currentWifiInfo.getSSID()
    + " ip:" + WifiUtil.intToIp(currentWifiInfo.getIpAddress()));
  new ScanWifiThread().start();
  super.onResume();
 }

 @Override
 public void setupViews()
 {
  scan_button = (Button) findViewById(R.id.scan_button);
  wifi_result_textview = (TextView) findViewById(R.id.wifi_result_textview);
  super.setupViews();
 }

 @Override
 public void initListener()
 {
  scan_button.setOnClickListener(this);
  super.initListener();
 }

 @Override
 public void onClick(View v)
 {
  switch (v.getId())
  {
  case R.id.scan_button:
   lookUpScan();
   break;
  }
 }

 /**
  * 打开wifi
  */
 public void openWifi()
 {
  if (!wifiManager.isWifiEnabled())
  {
   wifiManager.setWifiEnabled(true);
  }
 }

 /**
  * 扫描wifi线程
  *
  * @author passing
  *
  */
 class ScanWifiThread extends Thread
 {

  @Override
  public void run()
  {
   while (true)
   {
    currentWifiInfo = wifiManager.getConnectionInfo();
    startScan();
    try
    {
     Thread.sleep(1000);
    }
    catch (InterruptedException e)
    {
     break;
    }
   }
  }
 }

 /**
  * 扫描wifi
  */
 public void startScan()
 {
  wifiManager.startScan();
  // 获取扫描结果
  wifiList = wifiManager.getScanResults();
  str = new String[wifiList.size()];
  String tempStr = null;
  for (int i = 0; i < wifiList.size(); i++)
  {
   tempStr = wifiList.get(i).SSID;
   if (null != currentWifiInfo
     && tempStr.equals(currentWifiInfo.getSSID()))
   {
    tempStr = tempStr + "(已连接)";
   }
   str[i] = tempStr;
  }
 }

 /**
  * 弹出框 查看扫描结果
  */
 public void lookUpScan()
 {
  Builder builder = new Builder(WifiActivity.this);
  builder.setTitle("wifi");
  builder.setItems(str, new DialogInterface.OnClickListener()
  {

   @Override
   public void onClick(DialogInterface dialog, int which)
   {
    wifiIndex = which;
    handler.sendEmptyMessage(3);
   }
  });
  builder.show();
 }

 /**
  * 获取网络ip地址
  *
  * @author passing
  *
  */
 class RefreshSsidThread extends Thread
 {

  @Override
  public void run()
  {
   boolean flag = true;
   while (flag)
   {
    currentWifiInfo = wifiManager.getConnectionInfo();
    if (null != currentWifiInfo.getSSID()
      && 0 != currentWifiInfo.getIpAddress())
    {
     flag = false;
    }
   }
   handler.sendEmptyMessage(4);
   super.run();
  }
 }

 /**
  * 连接网络
  *
  * @param index
  * @param password
  */
 public void connetionConfiguration(int index, String password)
 {
  progressDialog = ProgressDialog.show(WifiActivity.this, "正在连接...",
    "请稍候...");
  new ConnectWifiThread().execute(index + "", password);
 }

 /**
  * 连接wifi
  *
  * @author passing
  *
  */
 class ConnectWifiThread extends AsyncTask<String, Integer, String>
 {

  @Override
  protected String doInBackground(String... params)
  {
   int index = Integer.parseInt(params[0]);
   if (index > wifiList.size())
   {
    return null;
   }
   // 连接配置好指定ID的网络
   WifiConfiguration config = WifiUtil.createWifiInfo(
     wifiList.get(index).SSID, params[1], 3, wifiManager);

   int networkId = wifiManager.addNetwork(config);
   if (null != config)
   {
    wifiManager.enableNetwork(networkId, true);
    return wifiList.get(index).SSID;
   }
   return null;
  }

  @Override
  protected void onPostExecute(String result)
  {
   if (null != progressDialog)
   {
    progressDialog.dismiss();
   }
   if (null != result)
   {
    handler.sendEmptyMessage(0);
   }
   else
   {
    handler.sendEmptyMessage(1);
   }
   super.onPostExecute(result);
  }

 }

 Handler handler = new Handler()
 {

  @Override
  public void handleMessage(Message msg)
  {
   switch (msg.what)
   {
   case 0:
    wifi_result_textview.setText("正在获取ip地址...");
    new RefreshSsidThread().start();
    break;
   case 1:
    Toast.makeText(WifiActivity.this, "连接失败!", Toast.LENGTH_SHORT)
      .show();
    break;
   case 3:
    View layout = LayoutInflater.from(WifiActivity.this).inflate(
      R.layout.custom_dialog_layout, null);
    Builder builder = new Builder(WifiActivity.this);
    builder.setTitle("请输入密码").setView(layout);
    final EditText passowrdText = (EditText) layout
      .findViewById(R.id.password_edittext);
    builder.setPositiveButton("连接",
      new DialogInterface.OnClickListener()
      {

       @Override
       public void onClick(DialogInterface dialog,
         int which)
       {
        connetionConfiguration(wifiIndex, passowrdText
          .getText().toString());
       }
      }).show();
    break;
   case 4:
    Toast.makeText(WifiActivity.this, "连接成功!", Toast.LENGTH_SHORT)
      .show();
    wifi_result_textview.setText("当前网络:"
      + currentWifiInfo.getSSID() + " ip:"
      + WifiUtil.intToIp(currentWifiInfo.getIpAddress()));
    break;
   }
   super.handleMessage(msg);
  }

 };

}

3、辅助类:WifiUtil.java

/**
 *
 */
package com.android.util;

import java.util.List;

import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;

/**
 * @author passing
 *
 */
public class WifiUtil
{

 /**
  * 配置wifi
  *
  * @param SSID
  * @param Password
  * @param Type
  * @return
  */
 public static WifiConfiguration createWifiInfo(String SSID,
   String Password, int Type, WifiManager wifiManager)
 {
  WifiConfiguration config = new WifiConfiguration();
  config.allowedAuthAlgorithms.clear();
  config.allowedGroupCiphers.clear();
  config.allowedKeyManagement.clear();
  config.allowedPairwiseCiphers.clear();
  config.allowedProtocols.clear();
  config.SSID = "\"" + SSID + "\"";

  WifiConfiguration tempConfig = isExsits(SSID, wifiManager);
  if (tempConfig != null) {
   wifiManager.removeNetwork(tempConfig.networkId);
  }

  if (Type == 1) // WIFICIPHER_NOPASS
  {
   config.wepKeys[0] = "";
   config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
   config.wepTxKeyIndex = 0;
  }
  if (Type == 2) // WIFICIPHER_WEP
  {
   config.hiddenSSID = true;
   config.wepKeys[0] = "\"" + Password + "\"";
   config.allowedAuthAlgorithms
     .set(WifiConfiguration.AuthAlgorithm.SHARED);
   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
   config.allowedGroupCiphers
     .set(WifiConfiguration.GroupCipher.WEP104);
   config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
   config.wepTxKeyIndex = 0;
  }
  if (Type == 3) // WIFICIPHER_WPA
  {
   config.preSharedKey = "\"" + Password + "\"";
   config.hiddenSSID = true;
   config.allowedAuthAlgorithms
     .set(WifiConfiguration.AuthAlgorithm.OPEN);
   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
   config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
   config.allowedPairwiseCiphers
     .set(WifiConfiguration.PairwiseCipher.TKIP);
   // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
   config.allowedPairwiseCiphers
     .set(WifiConfiguration.PairwiseCipher.CCMP);
   config.status = WifiConfiguration.Status.ENABLED;
  }
  return config;
 }

 /**
  * 判断wifi是否存在
  *
  * @param SSID
  * @param wifiManager
  * @return
  */
 private static WifiConfiguration isExsits(String SSID,
   WifiManager wifiManager)
 {
  List<WifiConfiguration> existingConfigs = wifiManager
    .getConfiguredNetworks();
  for (WifiConfiguration existingConfig : existingConfigs) {
   if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
    return existingConfig;
   }
  }
  return null;
 }

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


 

Android之Wifi模块开发 接口简介 开发实例接口简介因为项目需要,所以完成了一个简单的wifi模块,主要实现了打开wifi、获取网络列表、连接有密码或者无密码的网络等等,android为wifi操作提供了很多接口,在此简单总结一下所用的类和代码中使用的主要的方法(英语渣渣自己翻译的API,凑合看看吧)。1、 ScanResult 主要用来描述已检测出来的接入点。 变量名 简介 BSSID 接入点地址 阅读详情

相关推荐

Android网络通信之WiFi实例教程汇总

本文介绍了几个基于WiFi的网络通信实例教程,涵盖了WiFi连接状态的检查、获取已连接WiFi的名称、扫描附近的WiFi网络、连接到指定的WiFi网络以及使用Socket进行WiFi通信。本文将为你提供一些WiFi通信的实例教程,帮助你在Android应用中实现基于WiFi的网络通信功能。如果设备连接到了WiFi网络,我们可能需要获取当前连接的WiFi的名称。希望本文对你有所帮助!方法,并传入WiFi网络的名称和密码参数,即可实现连接到指定的WiFi网络。方法,我们可以获取当前连接的WiFi的名称。

DevGOOD的博客 321

android wifi连接

参考网上代码,结合了自己的想法,废话不多说,直接上代码 1、布局文件:wifi_layout.xml http://schemas.android.com/apk/res/android"  android:orientation="vertical" android:layout_width="match_parent"  android:layout_height="match_p

dianqiugg的专栏 4314

Android连接指定wifi的Demo

Android连接指定wifi的Demo

wifi工具类

忘哪儿看到的了,保存一下。

xiaoerbuyu1233的博客 455

Android Wifi连接demo

Android Wifi模块,实现了一些wifi常用的接口封装,可以实现wifi密码连接是否成功,wifi的加密发誓,wifi的(有无)密码连接等等。

Android Wifi开发Demo示例

Android Wifi开发的Demo程序,包括Wifi的搜索、连接、数据的传输。

安卓WIFI获取列表并密码连接 开发实例

安卓WIFI获取列表并密码连接 开发实例 标签(空格分隔): 未分类 最近在做关于智能控制的app,用到wifi控制,简单配置并获取过程 记录如下: 用WiFi首先要获取wifi列表 ,然后去连接wifi 和我们手机设置操作相同,首先要确认是否打开wifi开关吧,判断用wifiManager.isWifiEnabled()方法; 用到几个权限 &lt; uses-per...

blithe影子 5681

BBR算法原理与实现深度解析

BBR算法通过重新定义拥塞控制的基本范式,为现代网络应用提供了突破性的解决方案。随着QUIC协议的普及和智能网卡技术的发展,BBR类算法将在边缘计算、云游戏、工业物联网等领域发挥更重要的作用。

程序猿老樊的博客 2418

android wifi开发连接手机,Android wifi 调试详解及简单实例

Android wifi 调试前言:做android开发的时候,经常遇到的一个问题就是真机调试次数多了,会导致usb口,损坏,而且长期给手机充电也会损坏手机,所以我想了想是否可以拿usb调试,网上找了下,还真可以,但都写的比较繁琐,今天我们就使用3条命令完成任务首先我们需要使用的工具是adb,它基于tcp协议之上1.开始我们需要给手机开启tcpip模式,这个时候需要usb线连接手机adb tcpi...

weixin_30905039的博客 347

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

全网最全 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置

昨天(2024年7月23日)我们分享了学生及科研人员电脑配置推荐 | 笔记本+外置显卡配置,性能足够支持完成你博士论文文本内容,那么今天我们就分享一文解决 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置的教程,我们使用一文来解决大家在做生信时遇到安装系统、配置环境的问题。在此文中,我们尽快可能给出一套全网最全的教程。目标是解决新手小白同学查资源的困惑和难题。但是,每个童鞋遇到的问题不一样,此教程也不可能把你遇到的每个问题都归纳在其中。我们也希望,

BioinfoDu 2260

android网络通信之WIFI教程实例汇总

一、WIFI基础(相关文章) 1、Android WIFI网络操作 http://www.eoeandroid.com/thread-99637-1-1.html 2、【转】android sdk 中Android.net.wifi简要分析 http://www.eoeandroid.com/thread-70676-1-1.html 3、Android平台中Wifi的初始化

倔强的晓奇 1万+

Anaconda镜像源切换全攻略:从清华源到恢复默认设置的完整流程

本文详细介绍了Anaconda镜像源的管理与优化,重点讲解了如何配置清华源以提升国内下载速度。内容涵盖镜像源工作原理、清华源详细配置步骤、多源管理策略、常见问题排查以及如何安全恢复默认设置,帮助用户构建完整的镜像源管理体系。

weixin_28828243的博客 1021

Android-WiFi开发之 WifiManager

前言: 作为一名系统开发者, 对应用上 WiFi 的研发是一个 "门外汉" 的角色, 通过阅读 Android 源码, 逐渐对这一部分有了些许认识. 下方主要围绕 WifiManager 的函数系, 做了一些类似工具类的封装, 语言尽量简单, 希望对各位系统开发者能起到帮助的作用, 具体内容以 解释 + 注释 + 代码块的形式展示给大伙. 简介: WifiManager这个类, 是 A...

feelinghappy的专栏 4474

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质,在计算机网络的庞大体系中,网络硬件与传输介质犹如坚实的骨架与脉络,支撑并承载着信息的流动。从家庭中的小型网络,到企业复杂的办公网络,再到覆盖全球的互联网,各类网络硬件设备各司其职,不同的传输介质发挥着独特的传输作用。它们相互协作,使得数据能够在不同设备之间快速、准确地传输,为人们的日常沟通、工作办公、娱乐休闲等活动提供了基础保障。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

SAP自动化-ME51N批量创建采购申请

2、需要管理员授权RZ11脚本录制回放功能。1、仅限于正对SAP日常工作的批量处理。3、数据模板按实际需求更新。物料编码,工厂,数量。

小九啥也不会 529

Android 获取连接过的wifi列表

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnNAndroid 获取连接过的 WiFi 列表的实现指南 在本文中,我们将介绍如何在 Android 应用程序中实现获取设备连接过的 WiFi 列表的功能。这个功能对于许多应用程序都是非常实...

weixin_40470390的博客 420

C++实现复制粘贴文本功能

要实现这个功能,我们需要使用操作系统提供的函数来操作剪贴板。在Windows操作系统中,我们可以使用Windows API函数来访问剪贴板。总结起来,使用C++实现复制和粘贴文本功能涉及使用操作系统提供的API函数来操作剪贴板。在本篇文章中,我将向您展示如何使用C++编程语言实现复制和粘贴文本的功能。我们将使用操作系统提供的API来进行剪贴板操作,并编写相应的代码来完成这个任务。如果您使用的是Linux操作系统,您需要使用适当的库和函数来访问剪贴板。函数中,我们首先将一个字符串复制到剪贴板中,然后使用。

PixelDyno的博客 1233

Android Wifi使用方法大全

在Android里,所有的wifi操作都在android.net.wifi包里,而常用的类也就只用几个,对于一般的开发人员来说,常用的操作也是有限的,不需要刻意的去记,用的时候现查就ok了,下面是《Android应用开发揭秘》里面关于wifi的范例,个人感觉还挺齐全,跟大家分享一下! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...

55

110、3A 端到端调试:从 ISP register dump 到主观画质的完整调试流程

文章摘要 本文分享了ISP 3A(AE/AWB/AF)端到端调试的实战经验,通过具体案例解析常见问题排查方法。从硬件链路确认、寄存器dump分析、算法闭环验证到主观画质调优,提出了一套系统化调试流程。重点包括:如何通过示波器和寄存器抓包定位时序问题,AWB调试中black level校正的关键作用,AF闭环控制中hall传感器反馈的重要性,以及算法与硬件联调的"三板斧"方法论。作者强调3A调试本质是系统工程,需结合物理层信号测量、数据通路验证和算法状态跟踪,避免陷入局部优化陷阱。

sundong_81的博客 57

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android Wifi测试实例

android wifi连接开发实例 Android之WiFi开发应用示例

kangtingting01的专栏 1354

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【移动开发】Android中WIFI开发总结(一)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smallwoniu.blog.51cto.com/3911954/1334951        WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路

killcwd的专栏 630

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: android WIFI连接开发
下一篇: wifi开发——自动连接指定SSID的wifi热点(不加密/加密)
yongheng_123
博客等级 码龄18年 23粉丝 4原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值