当前位置: 首页 > news >正文

苏州高级网站建设项目融资平台

苏州高级网站建设,项目融资平台,wordpress算前端,青岛做网站公一、场景 业务需要通过App给设备配置无线网络连接#xff0c;所以需要App获取附近的WiFi列表#xff0c;并进行网络连接验证。 二、安卓端实现 1、阅读谷歌官网文档#xff0c;关于Wifi 接口使用 https://developer.android.com/guide/topics/connectivity/wifi-scan?hl…一、场景 业务需要通过App给设备配置无线网络连接所以需要App获取附近的WiFi列表并进行网络连接验证。 二、安卓端实现 1、阅读谷歌官网文档关于Wifi 接口使用 https://developer.android.com/guide/topics/connectivity/wifi-scan?hlzh-cn 文档的使用流程说的相当明了清晰注册--扫描--获取。 但是其提到了关于Android 10 以上版本的特别说明 而且看到代码中 标明接口过期但是实际调试使用发现在10以上版本中也是能正常接收到广播获取扫描结果的。只要申请号对应的权限 uses-permission android:nameandroid.permission.ACCESS_COARSE_LOCATION / uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION / uses-permission android:nameandroid.permission.INTERNET / uses-permission android:nameandroid.permission.ACCESS_WIFI_STATE / uses-permission android:nameandroid.permission.CHANGE_WIFI_STATE / uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE / uses-permission android:nameandroid.permission.CHANGE_NETWORK_STATE / 权限当然也需要动态申请 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},WIFI_REQUEST_FOR_PERMISSION); Android13 权限额外需求 https://developer.android.com/guide/topics/connectivity/wifi-permissions NEARBY_WIFI_DEVICES 这个在实际调试过程中发现加了和没加都能够获取到wifi列表数据。 另外需要注意的是定位权限是一回事手机系统有没有打开定义又是另外一回事所以在使用此功能前要先判断定位开关是否打开 // 通过GPS卫星定位定位级别可以精确到街通过24颗卫星定位在室外和空旷的地方定位准确、速度快 boolean gps locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // 通过WLAN或移动网络(3G/2G)确定的位置也称作AGPS辅助GPS定位。主要用于在室内或遮盖物建筑群或茂密的深林等密集的地方定位 boolean network locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (gps || network) {return true; } 再者就是WLAN 的开关有没有打开安卓10以下的可以直接通过代码设置10以上的需要跳转到设置界面引导用户打开 int wifiState wifiManager.getWifiState(); if (WifiManager.WIFI_STATE_ENABLED ! wifiState){if (Build.VERSION.SDK_INT Build.VERSION_CODES.Q) {ToastUtil.makeText(mContext,请打开WiFi开关);startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));//startActivity(new Intent(Settings.Panel.ACTION_WIFI));finish();}else {wifiManager.setWifiEnabled(true);} } 2、网络连接验证调试 为了确认用户输入的密码是正确的所以想对网络连接进行验证测试此时就发现安卓10 上下版本的接口差异了 API29 以下 https://developer.android.com/reference/android/net/wifi/WifiManager#addNetwork(android.net.wifi.WifiConfiguration) 添加 wifiManager.addNetwork 使能 wifiManager.enableNetwork 移除此处如果是设置里面原有保存的则无法移除需要引导 wifiManager.removeNetworkAndroidQ 以后 https://developer.android.com/guide/topics/connectivity/wifi-suggest?hlzh-cn /*** Android API 29 之后的wifi连接验证* param ssid 账号* param pwd 密码 目前都是用 WAP2 方式*/ RequiresApi(api Build.VERSION_CODES.Q) private void connectWifiAfterQ(String ssid, String pwd){WifiNetworkSpecifier.Builder builder new WifiNetworkSpecifier.Builder();builder.setSsid(ssid);builder.setWpa2Passphrase(pwd);WifiNetworkSpecifier wifiNetworkSpecifier builder.build();NetworkRequest.Builder networkRequestBuilder1 new NetworkRequest.Builder();networkRequestBuilder1.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);//networkRequestBuilder1.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {networkRequestBuilder1.setNetworkSpecifier(wifiNetworkSpecifier);}NetworkRequest networkRequest networkRequestBuilder1.build();ConnectivityManager cm (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);// 自己独有的callback中响应事件ConnectivityManager.NetworkCallback networkCallback newConnectivityManager.NetworkCallback() {Overridepublic void onAvailable(Network network) {super.onAvailable(network);Log.d(TAG, onAvailable: network);//让本App能够使用到此网络此时系统其他应用是无法联网的不知道是不是bugif (Build.VERSION.SDK_INT Build.VERSION_CODES.M) {cm.bindProcessToNetwork(network);}}Overridepublic void onLost(Network network) {Log.d(TAG, The application no longer has a default network. The last default network was network);}Overridepublic void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {Log.d(TAG, The default network changed capabilities: networkCapabilities);}Overridepublic void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {Log.d(TAG, The default network changed link properties: linkProperties);}Overridepublic void onUnavailable() {super.onUnavailable();Log.d(TAG, onUnavailable:);EventBus.getDefault().post(onUnavailable);}};cm.requestNetwork(networkRequest, networkCallback); } 这种安卓10以上版本的则需要使用suggestion方式去请求网络但是目前调试发现一个问题就是通过App成功连接到网络之后手机系统的其他应用则不能通过WiFi联网而官网给出的移除网络API使用不生效: https://developer.android.com/reference/android/net/wifi/WifiManager#removeNetworkSuggestions(java.util.List%3Candroid.net.wifi.WifiNetworkSuggestion%3E) 查找了一通资料最后貌似好像看到说是谷歌系统的bug至今可能还没有修复 https://issuetracker.google.com/issues/140398818/resources 在国内的华米OV几大机型上都测试了具有系统其他应用不能通过WIFI上网的问题由此影响用户体验所以最终不进行网络连接测试改为上报wifi名称和密码由设备自己去验证网络连接然后在APP中展示联网效果由此来看其他的IoT设备例如百度音响是否也是这么实现并没有通过App来改变手机本身系统的WiFi连接。 但是安卓10以下版本是无此问题的。 参考实现demo: https://github.com/zly394/WifiListDemo https://github.com/lilongweidev/Android13Wifi 三、苹果端实现 ​​​​​​https://developer.apple.com/documentation/networkextension/wi-fi_configuration/ 刚开始看文档以为会很简单调用几个接口即可实现。 后来才知道这个所谓的热点助手才能实现获取列表功能而且这个接口的使用权限要单独申请https://developer.apple.com/contact/request/hotspot-helper/ 不出意外这个申请果然被拒了苹果认为只有运营商或者网络设备制造商才有需要此功能。 Thank you for your interest in the NEHotspotHelper API. This API is not designed for the use you’ve identified, so this request cannot be approved. The NEHotspotHelper API is meant to be used by hotspot network implementers to connect their users to the internet via a large aggregated network of Wi-Fi Hotspots that they manage. NEHotspotHelper was designed to facilitate internet hotspot network connections and is not appropriate for apps trying to do IoT accessory integration, Wi-Fi location, or other low-level Wi-Fi tasks like signal strength. Specifically, NEHotspotHelper does not let your app initiate a local Wi-Fi scan, or access iOS’ internal list of nearby SSIDs.   Many perceived uses of NEHotspotHelper, such as the configuration of an IoT accessory, can be accomplished with NEHotspotConfiguration, which does not require an Apple-approved entitlement. For information about enabling your app to configure an IoT accessory, please see the following article: Configuring a Wi-Fi Accessory to Join the User’s Network For a complete explanation of Wi-Fi management APIs on iOS, please see Technote TN3111: iOS Wi-Fi API Overview. For further technical assistance please visit the Apple Developer Forums. Thank You, Apple Developer Relations 于是只能退而求其次通过用户手动输入WiFi名称和密码App端来进行网络连接校验这其中也遇到了权限问题 -(NSString *)getCurrentWifi{     NSString * wifiName  ;     CFArrayRef wifiInterfaces  CNCopySupportedInterfaces();     if (!wifiInterfaces) {         wifiName  ;     }     NSArray *interfaces  (__bridge NSArray *)wifiInterfaces;     for (NSString *interfaceName in interfaces) {         CFBridgingRetain(interfaceName);         CFDictionaryRef dictRef  CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));         if (dictRef) {             NSDictionary *networkInfo  (__bridge NSDictionary *)dictRef;             wifiName  [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];             NSLog(接口查询当前连接的wifi名称为 %, wifiName);             CFRelease(dictRef);         }     }     CFRelease(wifiInterfaces);     NSLog(最终确认当前连接的wifi名称为 %, wifiName);     return wifiName; }   就是如上这段代码刚开始始终是获取不到当前连接的WiFi名称的而网络上查询的资料大部分都是用此方法。后面无意中在发现一个告警日志 sent invalid result code [1] for Wi-Fi information request 通过网络搜索原来需要开启capacity Access wifi information . 而不只是引入这两个框架即可 //连接wifi的框架 #import NetworkExtension/NetworkExtension.h //获取当前wifi的框架 #import SystemConfiguration/CaptiveNetwork.h 并且这个方法单独调用也是获取不到当前Wifi名称的而是需要NEHotspotConfigurationManager 这个请求回调里面执行才可。不知道是不是也只能查询到自己发起请求连接的WiFi还是怎么回事 NEHotspotConfiguration * configuration  [[NEHotspotConfiguration alloc] initWithSSID:wifiName passphrase:passwd isWEP:NO];     [[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:^(NSError * _Nullable error) {                  if(error ! nil){             NSLog(apply config error% code%ld, error.description, (long)error.code);         }else{             NSLog(apply config success ? wifiName%, passwd%, wifiName, passwd);         }         //有时无法加入WIFI没有返回error         if ([[self getCurrentWifi] isEqualToString:wifiName]) {             if (error) {                 //无法加入网络需移除                 [[NEHotspotConfigurationManager sharedManager] removeConfigurationForSSID:wifiName];                 if(error.code  NEHotspotConfigurationErrorAlreadyAssociated){                     //上报账号密码这个是正确的连接 应该不会出现这个逻辑了                     NSLog(WiFi之前已经连接成功不应该走这个逻辑了前面每次都先移除了);                     //[self ConfigSuccessBack];                 }else{                     [self alertConfigInfoError:NSLocalizedString(wifiConfigAccountPasswordError, nil)];                 }                              }else{                 //连接wifi成功                 NSLog(连接WiFi成功);                 [self ConfigSuccessBack];             }         }else{             //无法加入网络需移除             [[NEHotspotConfigurationManager sharedManager] removeConfigurationForSSID:wifiName];             [self alertConfigInfoError:NSLocalizedString(wifiConfigAccountPasswordError, nil)];         }     }];   总之一番操作之后确认需要添加的Capacity 有如下三个 com.apple.developer.networking.HotspotConfiguration       com.apple.developer.networking.networkextension       com.apple.developer.networking.wifi-info 最终苹果端这边还是可以成功验证网络是否正常连接而且不影响系统重其他应用上网。 一个看似很简单的功能前前后后各种零散问题分析查阅调试验证安卓的各种机型和版本苹果的各种权限和邮件回复让这个功能还是弄了蛮久关键是这种功能涉及敏感安全为了防止滥用系统平台随着自己的不断完善发展对其限制要求会越来越严格。
http://www.dnsts.com.cn/news/34538.html

相关文章:

  • 免费建网站 建站之星网站建设百度搜索到左边的图
  • 自己做的网站出现iis7四川工程造价信息网
  • 个人网站设计论文怎么写古交网站建设推广
  • 南宁网站建设方案详细方案网络规划设计师教程第二版
  • 在凡科上做的网站无法加载出来红色博客网站源码
  • 鞍山云网站建设银行网站驱动
  • pr模板免费下载网站长沙设计网站多少钱
  • 做网站有什么软件wordpress插件一键安装
  • 做视频网站要多大的服务器四川电子商务网站
  • 做网站有底薪吗seo网站架构
  • 做app护肤网站公司装修设计公司
  • fm网站开发网站访问速度跟服务器cpu和内存和带宽哪个重要
  • 网站建设需要资料wordpress加载不出图
  • 长春建网站一般要多少钱纸箱 技术支持 东莞网站建设
  • 网上做兼职的网站有哪些工作十大免费观看软件下载
  • 北京网站建设哪家公司好手机网站推广方案
  • wordpress可以建立多个站点金山做网站
  • 珠海工商年检到哪个网站做建设银行网银登录入口
  • 潍坊网站制作培训服装设计专业主要学什么
  • 可以自己做课程的网站四川省建设监理协会官方网站
  • 私人网站怎么注册十大免费推广平台
  • 网站开发的体会上海做网站的企业
  • 电商网站建设推荐ppt的制作方法
  • 旅游网站设计与实现中山微网站建设多少钱
  • 软件下载网站建设免费wordpress
  • 网站开发 技术路线wordpress在线查看word插件
  • 爱搜索中级网站建设电商线上培训
  • 湖州网站建设培训电脑网站 发展移动端
  • 北京哪里有专门做网站的地方商城网站建设需要
  • 视频网站后台管理系统个人电脑做网站服务器网站