背景:公司有款产品内置wifi模块,需要Android端提供接口供前端uni-app去调用。主要功能分为开启wifi、关闭wifi、连接wifi。

重点:以下会涉及Android10以下以及Android10(包括harmony系统)以上的连接方法。

记得在配置文件中声明权限

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

1.首先判断有没有开启wifi,未开启则提示开启(同)

//判断wifi开启和关闭public boolean isWifi() {WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);if(wifiManager.isWifiEnabled()) {return true;} else {return false;}}

2.开启连接指定的目标wifi(异)

(1)Android10以下连接方法,首先获取前端传入的两个参数,分别是wifi名称和wifi密码

//Android 10 以下版本wifi连接public boolean linkWifi(String ssid, String pass) {WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);WifiConfiguration conf = new WifiConfiguration();//如果有连接隐藏wifi需求的话,增加conf.hiddenSSID = true这句代码,加上此句则可以检索到隐藏wifi//conf.hiddenSSID = true;conf.SSID = "\"" + networkSSID + "\"";//对于WPA网络密码采用以下输入方式conf.preSharedKey = "\"" + networkPass + "\"";wifiManager.addNetwork(conf);@SuppressLint("MissingPermission") List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();for (WifiConfiguration i : list) {if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {wifiManager.disconnect();wifiManager.enableNetwork(i.networkId, true);wifiManager.reconnect();break;}}return true;}

(2)Android10以上连接方法(P2P),首先获取前端传入的两个参数,分别是wifi名称和wifi密码

public boolean linkWifi (String ssid, String pass) throws InterruptedException{if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q){NetworkSpecifier specifier =new WifiNetworkSpecifier.Builder().setSsidPattern(new PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX)).setWpa2Passphrase(pass).build();NetworkRequest request =new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).setNetworkSpecifier(specifier).build();ConnectivityManager connectivityManager = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {@Overridepublic void onAvailable(Network network) {//表示使用该网络connectivityManager.bindProcessToNetwork(network);}@Overridepublic void onUnavailable() {return;}};connectivityManager.requestNetwork(request, networkCallback);// Release the request when done.// connectivityManager.unregisterNetworkCallback(networkCallback);}return true;}

3.断开当前所连接的wifi

    @RequiresApi(api = Build.VERSION_CODES.M)public boolean recoverywifi (){//Android 10 以上断开方法if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {ConnectivityManager connectivityManager =(ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);connectivityManager.bindProcessToNetwork(null);WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);wifiManager.disconnect();}else{//Android 10 以下断开方法WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);wifiManager.disconnect();}return true;}

小结:Android10以上的手机调用连接wifi代码的时候都会出现弹窗,需要用户允许才能连接目标wifi,属于正常现象。硬件的配置、手机的性能、信号的强弱都会对连接wifi的速度有影响,所以连接过程中检索转圈属于正常现象。

【uni-app】基于uni-app的Android离线打包,wifi物联网相关推荐

  1. android没有界面app,Android离线打包 app处于原生界面 切换到桌面再点击app 原生界面被关闭...

    Android离线打包环境, 当app打开原生界面时,点击Home键到桌面,然后点击桌面图标打开app,原生界面被关闭,无论原生界面层级多少,都是返回到io.dcloud.PandoraEntry这个 ...

  2. uni-app项目Android离线打包UrlSchemes设置

    UrlSchemes配置 在uni-app项目中,UrlSchemes设置实现被第三方应用调用,主要有两种情况: 一.在线打包 在HBuilderX 中打开uni-app项目的manifest.jso ...

  3. Android离线打包文档

    Android 离线打包过程(包含处理视频) 文章目录 Android 离线打包过程(包含处理视频) 打包前的准备 正文开始 (1)如何生成`keystore` (2)生成签名证书 1.使用`keyt ...

  4. Uni-app Android 离线打包集成 uni-push(个推)消息推送

    转载:Uni-app Android 离线打包集成 uni-push(个推)消息推送 1.首先去官网下载Android离线SDK(下载地址) 2.在下好的SDK中找到aps-release.aar, ...

  5. 【uniapp项目Android离线打包app教程】

    [最近打包移动端Android App,看了很多资料教程,整理了一下,送给有缘人 1.下载Android Studio 打包app需要用到Android Studio,如果没有可以先去下载,按提示安装 ...

  6. uniapp Android 离线打包之未配置appkey或配置错误

    按照官网说明,原生开发者支持DCloud 原生开发者支持网站 uni小程序SDK.App离线打包SDK.原生插件开发https://nativesupport.dcloud.net.cn/AppDoc ...

  7. android asset jar,android离线打包 可以使用,但总是报错 android_asset/null

    按照官网的教程配置了离线打包的项目 https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android 但是总是报错: I/OpenGLRendere ...

  8. android已停止三星,急,android离线打包程序三星下总报 程序 已停止

    解开锁屏后,就看到 图片所示的 程序 已停止的提示框,logcat显示如下 11-27 15:33:33.725: I/AndroidRuntime(24861): VM exiting with r ...

  9. dcloud进行android离线打包 需要继承io.dcloud.application.DCloudApplication的问题

    由于项目中使用到了百度地图,且是H5与原生交互操作,既有H5界面 又存在android的原生界面, 在原生界面中如果要使用百度地图需要在Application类中进行初始化,但是由于DCloud已经有 ...

最新文章

  1. 变革!建设行业大数据的崛起
  2. PowerPC中断系统简介(一)
  3. LightGBM 相关知识理解
  4. 如何在Java中对Collection对象进行排序?
  5. Pandas DataFrame 取消科学计数法打印
  6. 【蓝桥杯嵌入式】【STM32】2_KEYBOARD(主循环扫描+外部中断)
  7. Python版归并排序算法(附Python程序__name__属性用法演示视频)
  8. 看懂别人的代码,和自己能写代码是两回事
  9. [WCF编程]10.操作:请求/应答操作
  10. Appium自动化测试-iOS
  11. 计算机应用基础信息素养,计算机应用基础:信息素养+Office 2013办公自动化
  12. Pandas数据分析第2部分
  13. 如何对 Excel 中的数据使用 SQL 查询
  14. FineReport新建数据连接
  15. 使用Python实现淘宝订单定时付款
  16. 服务器系统才有卷影副本吗,windows server 2019没有适合具有卷影副本的卷
  17. 数据库——完整性约束条件
  18. Java整合jcef
  19. 华为宣布鸿蒙OS开源
  20. HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了

热门文章

  1. xampp安装shopex乱码
  2. win7 IIS客户端远程服务器端访问配置和部署问题(含泪摸索一周才总结出来的)
  3. easyui select 标签事件
  4. github代码行数统计
  5. 在线编辑Office文档软件——WebOffice,常见问答来帮你!
  6. 计算关联度矩阵matlab,计算关联度matlab
  7. RS232 RS485 MODBUS RTU转PROFINET PROFIBUS网关将G120XA变频器接入西门子1500 PROFINET网络配置方法
  8. 【搞定CAD】经典练习题库解答、此题多解。
  9. 74HC245 内部结构及作用
  10. Unity Shader入门精要 第4章 笛卡尔坐标系 读书笔记