1.引包

implementation 'com.thanosfisherman.wifiutils:wifiutils:1.6.4'
implementation 'com.thanosfisherman.elvis:elvis:3.0'

2.使用

 WifiDialog(act).Builder().create().show()

3.wifiDialog


import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.net.wifi.ScanResult
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.kongzue.dialog.v3.WaitDialog
import com.snjk.recyclebox.R
import com.snjk.recyclebox.offline.utils.dp2pxI
import com.snjk.recyclebox.offline.utils.toast
import com.thanosfisherman.wifiutils.WifiUtils
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionErrorCode
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionSuccessListener
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.TimeUnitclass WifiDialog(val activity: AppCompatActivity) : Dialog(activity) {inner class Builder {private lateinit var dialog: WifiDialogprivate lateinit var view: Viewprivate var wifiAdapter = WifiAdapter()private val wifiUtils = WifiUtils.withContext(context)private var disposable: Disposable? = null@SuppressLint("InflateParams")private fun initView() {val inflater =context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflaterview = inflater.inflate(R.layout.dialog_wifi, null)dialog = WifiDialog(activity)dialog.addContentView(view,ViewGroup.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,300.dp2pxI(activity)))dialog.setCancelable(true)dialog.setCanceledOnTouchOutside(true)}fun create(): Builder {initView()wifiAdapter.setOnItemClickListener { _, _, position ->shouPwdView(wifiAdapter.getItem(position))}view.findViewById<RecyclerView>(R.id.wifiRcv).apply {adapter = wifiAdapterlayoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)}wifiUtils.enableWifi { if (!it) "wifi打开失败,请联系管理员".toast() }Observable.interval(30, TimeUnit.SECONDS).observeOn(Schedulers.io()).doOnSubscribe { d -> disposable = d }.doOnNext { scanWifi() }.subscribe()dialog.setOnDismissListener { disposable?.dispose() }scanWifi()return this}fun show() = dialog.show()private fun shouPwdView(sr: ScanResult) {val et = EditText(context)AlertDialog.Builder(context).setTitle("请输入密码").setView(et).setNegativeButton("取消") { d, _ -> d.dismiss() }.setPositiveButton("连接") { d, _ ->d.dismiss()showLoading()WifiUtils.withContext(context).connectWith(sr.SSID, et.text.toString()).setTimeout(10000).onConnectionResult(object : ConnectionSuccessListener {override fun success() {"wifi连接成功".toast()hideLoading()dialog.dismiss()}override fun failed(errorCode: ConnectionErrorCode) {Toast.makeText(context, "EPIC FAIL!$errorCode", Toast.LENGTH_SHORT).show()hideLoading()}}).start()}.show()}private fun scanWifi() {wifiUtils.scanWifi {if (it.isNullOrEmpty()) "附件没有可用的wifi".toast() else {wifiAdapter.setNewInstance(it)wifiAdapter.notifyDataSetChanged()
//                    //以下为打印数据
//                    val sb = StringBuffer()
//                    it.map {
//                        sb.append("设备名(SSID) ->${it.SSID}\t")
//                            .append("信号强度 ->${it.level}\t")
//                            .append("BSSID ->${it.BSSID}\t")
//                            .append("level ->${it.level}\t")
//                            .append("wifi -> ${it}")
//                    }
//                    Log.e("TTT", sb.toString())}}.start()}private fun showLoading() {WaitDialog.show(activity, "wifi连接中...").setOnBackClickListener { false }}private fun hideLoading() {WaitDialog.dismiss()}inner class WifiAdapter : BaseQuickAdapter<ScanResult, BaseViewHolder>(R.layout.item_wifi) {override fun convert(holder: BaseViewHolder, item: ScanResult) {holder.setImageResource(R.id.wifiIcon, when (item.level) {in 0 downTo -50 -> R.drawable.icon_wifi_fullin -50 downTo -70 -> R.drawable.icon_wifi_goodin -70 downTo -90 -> R.drawable.icon_wifi_littleelse -> R.drawable.icon_wifi_weak}).setText(R.id.wifiName, item.SSID).setGone(R.id.wifiConn, !wifiUtils.isWifiConnected(item.SSID)).setGone(R.id.wifiToConn, wifiUtils.isWifiConnected(item.SSID))}}}
}

4.wifiDialog布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="260dp"android:layout_height="320dp"android:layout_gravity="center"android:background="@drawable/ic_wifi_dialog"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="46dp"android:gravity="center"android:text="wifi列表"android:textSize="14sp" /><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="#cfcfcf" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/wifiRcv"android:layout_width="match_parent"android:layout_height="match_parent"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"tools:listitem="@layout/item_wifi" />
</LinearLayout>

5.wifi布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="46dp"android:orientation="vertical"><TextViewandroid:id="@+id/wifiName"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center_vertical"android:layout_weight="1"android:gravity="center_vertical"android:paddingStart="10dp"android:paddingEnd="10dp"android:textSize="14sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="snkj" /><ImageViewandroid:id="@+id/wifiIcon"android:layout_width="16dp"android:layout_height="16dp"android:src="@drawable/icon_wifi_full"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toRightOf="@+id/wifiName"app:layout_constraintTop_toTopOf="parent"tools:ignore="ContentDescription" /><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="#efefef"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" /><TextViewandroid:id="@+id/wifiConn"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center_vertical"android:paddingStart="10dp"android:paddingEnd="10dp"android:text="已连接"android:textColor="#009900"android:textSize="12sp"android:visibility="gone"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/wifiToConn"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center_vertical"android:paddingStart="10dp"android:paddingEnd="10dp"android:text="连接"android:textColor="#0000cc"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

android 获得wifi列表并连接wifi相关推荐

  1. java 获取wifi_获取wifi列表并连接wifi

    一.获取wifi列表 获取wifi列表需要用wifiManager.startScan();进行扫描,扫描结果的列表使用List 保存 扫描步骤: wifiManager.startScan(); / ...

  2. Android7.0+ 获取WiFi列表以及连接WiFi

    获取WiFi列表并连接 这段时间项目中涉及到需要获取WiFi列表以及连接,在这里记录下 其中就有一个坑,在Android7.0以上还需要打开定位(也就是手机中"位置信息") Wif ...

  3. Qt获取wifi列表,连接wifi后获取IP地址

    环境win7+qt5.13+MinGW32,台式机 直接上步骤了,网上看到的略显啰嗦,就是这么简单直接: 1.头文件 #include "windows.h",#include & ...

  4. android 获取wifi的加密类型,Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等...

    下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等. 下面是效果图: GitHub 下载地址:https: ...

  5. 笔记本电脑不显示WIFI列表无法连接到网络的解决办法

    笔记本电脑不显示WIFI列表无法连接到网络的解决办法 笔记本电脑WiFi列表不显示,如下图: 以下以Win10系统来操作演示解决办法: (一)检查网卡驱动是否正常 笔记本电脑突然不显示WiFi列表,多 ...

  6. H5获取wifi列表及当前wifi

    H5获取wifi列表及当前wifi <script type="text/javascript" src="./js/jquery.js">< ...

  7. ESP32入门基础之ESP32作为 WIFI Station去连接wifi热点

    文章目录 1 工程简介 1.1 在menuconfig配置WiFi账号.密码 1.2 在程序中配置WiFi账号.密码 1 工程简介 参考工程为乐鑫官方例程: 实验目标: ESP32作为WiFi sta ...

  8. 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...

  9. Android之Wifi学习(2)------连接Wifi

    之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1).本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡.关闭无线网卡.检查网卡状态.扫描网络.扫描结果. ...

最新文章

  1. Git中的Sign Off功能是什么?
  2. 20145205《Java程序设计》课程总结
  3. elementui vue的html随机点名器软件网页版源码1.1
  4. bson json c语言,对比平台--JSON和BSON之间的区别
  5. linux网络配置、ssh、scp及命令优先级作业
  6. L2-002 链表去重 (25 分)—团体程序设计天梯赛
  7. 用JCreator编写java程序
  8. lcd1602c语言程序分析,全方位解析LCD1602特性及单片机显示应用
  9. OMNeT 例程 Tictoc9 学习笔记
  10. 一套键鼠操控多台电脑Mouse without Borders
  11. 飞机步道(plane trails)
  12. 计蒜客 T1817 分解质因数(数论)
  13. Sybase datetime 时间转换格式 convert(varchar(10),字段名,转换格式)
  14. 顿可集团线上订货平台开发案例
  15. 关于公正执法的一点想法
  16. Linux抓包工具:tcpdump
  17. 共享和资源共享的区别
  18. Windows下 C++代码检测工具
  19. 全国计算机一级等级分布,全国计算机等级考试一级B题型分布、考核界面与相关操作.doc...
  20. python自学教程——简介

热门文章

  1. vue打包成组件lib
  2. C语言:scanf输出方式
  3. 超宽带(UWB)学习笔记——测距性能分析的CRB(Cramer-Rao)界和ZZB(Ziv-Zaka)界
  4. SIP的基本工作过程
  5. vs2005关于:无法启动调试 绑定句柄无效 的解决办法 [整理]
  6. 【图像处理】——双边滤波
  7. 达尔优机械师合金版灯光
  8. shopify api php 开发,Shopify 脚本 API 参考
  9. HDU6560 The Hermit(思维)
  10. 代驾司机兼职跑腿,滴滴能否收获双倍快乐?