Android8.0 9.0 10.0获取wifi名字问题

一、添加权限

    <!--使用网络-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--wifi状态权限-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--位置信息-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--如果是安卓10.0,需要后台获取连接的wifi名称则添加进程获取位置信息权限 -->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <!--android 10.0使用wifi api新添加的权限-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

二、申请权限

申请权限框架较多,本人使用的 RxPermissions

android8.0以上需要开启位置信息,如图

android9.0以上需要申请定位权限

android10.0需要申请新添加的隐私权限ACCESS_FINE_LOCATION详情见android官方10.0重大隐私权变更,如果还需要后台获取或者使用wifi api则还需要申请后台使用定位权限ACCESS_BACKGROUND_LOCATION

三、申请权限代码示例

* 判断是否获取到了定位权限,获取wifi信息需要 private fun rxPermissions() { //获取必要权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { RxPermissionsUtlis( this, RxPermissions(this), getString(R.string.permissions14), object : RxPermissionsUtlis.PermissionCallbacks { override fun onPermissionsGranted() { if (!LocationUtils.isGpsEnabled()) { LogUtils.e(TAG, "没有开启GPS定位") openGpsSettings() } else { //获取连接的wifi名称 getConnectWifiSsid() override fun onPermissionsDenied() { finish() Manifest.permission.ACCESS_BACKGROUND_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION } else { RxPermissionsUtlis( this, RxPermissions(this), getString(R.string.permissions1), object : RxPermissionsUtlis.PermissionCallbacks { override fun onPermissionsGranted() { //先判断Android系统,9.0以上除了需要定位权限还需要开启GPS才能获取wifi名字 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (!LocationUtils.isGpsEnabled()) { LogUtils.e(TAG, "没有开启GPS定位") openGpsSettings() override fun onPermissionsDenied() { finish() Manifest.permission.ACCESS_COARSE_LOCATION * 获取连接wifi的ssid * @return private fun getConnectWifiSsid(): String { val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager val wifiInfo = wifiManager.connectionInfo LogUtils.e(TAG, "wifiInfo==$wifiInfo") LogUtils.e(TAG, "SSID===${wifiInfo.ssid}") return wifiInfo.ssid * 打开Gps设置界面 private fun openGpsSettings() { val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))