一、添加权限
<!--使用网络-->
<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以上需要开启位置信息,如图
android10.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))
}