今天连接硬件设备的时候,需要用到wifi名和密码来进行绑定配对。在获取wifi名的时候,意外发现为空。于是就开始找寻解决方案。

后来找到这么一篇文章:

Android获取WIFI 的ssid 方法适配Android9.0

原来是因为在8.0以后,获取wifi的ssid的方法有所变动,所以后来的手机没办法直接获取wifi的ssid了。解决方法是对手机的版本进行判断,8.0以上版本的利用其他方法来获取ssid。

首先,获取权限是必须的,8.0以上的在 Androidmanifast 里添加

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如果是9.0的话,还需要打开gps权限

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

添加完权限之后,9.0版本需要打开gps权限。具体打开方法可以参考其他权限的打开方式。

其次,就是主要的获取ssid的代码了。

    /*** 获取SSID* @param activity 上下文* @return  WIFI 的SSID*/public String getWIFISSID(Activity activity) {String ssid="unknown id";if(Build.VERSION.SDK_INT == Build.VERSION_CODES.O_MR1){//针对Android9.0 10.0 11.0的ConnectivityManager connManager = (ConnectivityManager) mContext.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);assert connManager != null;NetworkInfo networkInfo = connManager.getActiveNetworkInfo();if (networkInfo.isConnected()) {if (networkInfo.getExtraInfo()!=null){return networkInfo.getExtraInfo().replace("\"","");}}}else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O||Build.VERSION.SDK_INT==Build.VERSION_CODES.P) {WifiManager mWifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);assert mWifiManager != null;WifiInfo info = mWifiManager.getConnectionInfo();if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return info.getSSID();} else {return info.getSSID().replace("\"", "");}} else if (Build.VERSION.SDK_INT==Build.VERSION_CODES.O_MR1){ConnectivityManager connManager = (ConnectivityManager) activity.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);assert connManager != null;NetworkInfo networkInfo = connManager.getActiveNetworkInfo();if (networkInfo.isConnected()) {if (networkInfo.getExtraInfo()!=null){return networkInfo.getExtraInfo().replace("\"","");}}}return ssid;}

其中,如果用的sdk过低的话,可能会造成Build.VERSION_CODES的数据丢失,找不到对应的代码。如果遇到这种情况,可以改成:

//        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O||Build.VERSION.SDK_INT==Build.VERSION_CODES.P) {if (Build.VERSION.SDK_INT <= 26||Build.VERSION.SDK_INT==28) {...
//        } else if (Build.VERSION.SDK_INT==Build.VERSION_CODES.O_MR1){} else if (Build.VERSION.SDK_INT==27){...}

这样就可以获取到wifi的ssid了。

附:打开权限的方法:

Activity.java

//   调用权限检查。
public class Activity extends AppCompatActivity {// 所需的全部权限static final String[] PERMISSIONS = new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.ACCESS_FINE_LOCATION};private PermissionsChecker mPermissionsChecker;...@Overrideprotected void onCreate(Bundle savedInstanceState) {...mPermissionsChecker = new PermissionsChecker(this);if (mPermissionsChecker.lacksPermissions(PERMISSIONS)) {startPermissionsActivity();}else {ITAMachine.startMachine(context, globalHandler,false);}...}
}

PermissionsChecker.java

/*** Created by Dev01 on 2017/4/19.*/public class PermissionsChecker {private final Context mContext;public PermissionsChecker(Context context) {mContext = context.getApplicationContext();}// 判断权限集合public boolean lacksPermissions(String... permissions) {for (String permission : permissions) {if (lacksPermission(permission)) {return true;}}return false;}// 判断是否缺少权限private boolean lacksPermission(String permission) {return ContextCompat.checkSelfPermission(mContext, permission) ==PackageManager.PERMISSION_DENIED;}
}

关于Android 8.0/9.0 之后获取wifi名称为空的解决方法相关推荐

  1. 【我的Android进阶之旅】解决Android 8.1系统部分机型获取Wifi名字为空 WifiInfo.getSSID为空或者为<unknown ssid>的情况

    一.需求描述 最近做一个需求,需要在做某个业务之前,判断Android设备是否连接上指定名称的WiFi.如果连接上了指定名称的WiFi才可以继续某个业务:否则就跳到设置去连接该指定名称的WiFi. 因 ...

  2. Android12 (S) 获取wifi名称(SSID)的方法

    目录 概述 问题分析 总结 概述 在最近开发过程中需要获取当前wifi的SSID,目前网上一般推荐 mWifiManager.getConnectionInfo() 这个方法来进行获取,但是发现在An ...

  3. android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...

    一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...

  4. iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)

    前段时间在开发过程中遇到一个问题,就是之前设置的获取手机连接WiFi名称的方法不起作用了,后来经查发现是因为新系统需要申请开启相对应的权限才能获取到手机连接的WiFi名称等信息,本章就来讲一下iOS1 ...

  5. Android Studio WiFi 之 获取 WiFi 名称、IP、Mac

    Android 获取连接的WIFI 的一些数据(后期封装成aar 包给Unity 调用) 封装成AAR包,获取 Android 7.0 以上的 手机 mac 地址 一.Android 代码 impor ...

  6. Android获取WiFi名称/路由器AP地址总结

    前言 谷歌有一点点的蛋疼,没想到定位也需要加上版本的判断了,再此总结下定位权限以及WiFi AP SSID的获取. 安卓9.0定位权限 安卓系统在9.0之后如果不开启手机的GPS服务功能,应用即使已经 ...

  7. 所有服务器显示不兼容,魔兽世界6.0服务器显示不兼容怎么办 服务器显示不兼容解决方法介绍...

    今天小编为大家带来了魔兽世界6.0服务器显示不兼容怎么办 服务器显示不兼容解决方法介绍,感兴趣的朋友们可以跟着小编去下文了解一下哦! <魔兽世界>6.0版本游戏"德拉诺之王&qu ...

  8. flutter 获取wifi名称以及Android10获取不到wifi名称<unknown ssid>

    插件 我使用的是wifi_iot这个插件,版本是0.2.2,flutter版本是1.20.0. dependencies:flutter:sdk: flutterwifi_iot: ^0.2.2 获取 ...

  9. android编程权威指南 的PhotoGallery项目Flickr 不能访问的替代解决方法

    android编程权威指南 的PhotoGallery项目Flickr 不能访问的替代解决方法 参考: <<android编程权威指南(第2版)>>的PhotoGallery项 ...

最新文章

  1. Docker(九):Docker实战 安装 Ubuntu
  2. python 清空list 方法
  3. Linux质数合数的脚本,python输出100以内的质数与合数实例代码
  4. 设计模式的功力长了!
  5. LIDAR in Google Earth
  6. JQuery选择器中含有冒号的ID处理差异的分析
  7. python爬虫百度文库_百度文库爬虫,Python爬取百度文库内容输出word文档low版
  8. 第四季-专题5-内核模块开发
  9. uniwebview按钮被无形遮挡问题
  10. 基于人脸识别录入 人脸图片识别 及测试的效果
  11. C语言 --- sizeof() 7种使用详解
  12. Alex(ALEXANDER的简写,.亚历山大)
  13. 移动数字化平台原来可以这样帮企业打造协同生态链
  14. 尽一下地主之宜,献上关于龙井茶的知识(介绍+分类+购买)
  15. 使用java爬取国家统计局的12位行政区划代码
  16. leetcode 1534. Count Good Triplets(python)
  17. 爬虫之CCTV6电影名字
  18. 安庆师范大学c语言程序设计,安庆c语言编程学习,安庆学c语言编程培训,安庆学c语言编程一般能拿多少工资...
  19. exe和dll放到不同目录中的方法
  20. 物联网安全知识点总结--第四章 物联网感知层安全

热门文章

  1. 【点赞收藏】36个顶级数据分析方法与模型!
  2. 美丽的数据 :数据可视化与信息可视化浅谈
  3. 等保2.0的自动代码审计及开源治理解决方案
  4. tesseract的安装
  5. 修复鼠标单击变双击的问题
  6. 最近穷疯了只好吃馒头
  7. がいねんとれいさいのにちじょう
  8. 一个强悍而优美的Android视频播放器
  9. 神舟战神G8-CA7NP怎么样?测评值得买吗?
  10. Java语言基础(常见对象3(数组排序(冒泡排序、选择排序、直接插入排序、快速排序、归并排序)、Arrays、基本数据类型包装类、Integer类、自动拆箱、自动装箱))