我正在使用华为定位套件。我有一个问题,即 GPS 位置图标始终在通知栏中,即使我有此功能来停止请求位置更新。
private fun stopLocationUpdates() {
fusedLocationProviderClientClient.removeLocationUpdates(locationCallback)
}
我在 onPause() 中调用函数
override fun onPause() {
super.onPause()
stopLocationUpdates()
}
现在,当我从当前片段中弹出BackStack 时, removeLocationUpdates(locationCallback) 可以工作。gps 位置图标从通知中消失。但是,当我从当前片段导航到另一个片段时,即使从 onPause 执行 removeLocationUpdates(locationCallback),通知上的 gps 位置图标也不会消失。停止请求的唯一方法是关闭最近使用的应用程序中的应用程序。
有人知道原因吗?
这是我的一些其他代码:
private var fusedLocationProviderClientClient: FusedLocationProviderClient? = null
private var locationRequest: LocationRequest? = null
private var locationCallback: LocationCallback? = null
private var huaweiMap: HuaweiMap? = null
private fun prepareLocation() {
locationRequest
?: LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
.setInterval(30000)
.setFastestInterval(10000)
.setSmallestDisplacement(250.toFloat())
.also {
locationRequest = it }
locationCallback
?: object :
LocationCallback() {
override fun onLocationResult(
locationResult: LocationResult?
) {
locationResult
?: return
locationResult.lastLocation
?: return
currentLocation = LatLng(
locationResult.lastLocation.latitude, locationResult.lastLocation.longitude
)
}
override fun onLocationAvailability(
locationAvailability: LocationAvailability?
) {
}
}.also {
locationCallback = it }
fusedLocationProviderClientClient
?: LocationServices.getFusedLocationProviderClient(requireActivity())
.also {
fusedLocationProviderClientClient = it }
}
private fun requestLocationUpdates() {
locationClient?.requestLocationUpdates(locationRequest, locationCallback, null)
}
我在 onMapReady() 中调用了 requestLocationUpdates
override fun onMapReady(hMap: HuaweiMap?) {
// if maps is not yet initialized
if (huaweiMap == null ) {
huaweiMap = hMap
prepareLocation()
checkPermissionThenRequestLocation()
}
else {
//insert code
}
}
private fun checkPermissionThenRequestLocation() {
if (!(isFineLocationGranted && isCoarseLocationGranted)) {
val permissions = arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
)
requestPermissions(
permissions, MainActivity.PERMISSION_REQ_CODE_LOCATION
)
} else {
requestLocationUpdates()
}
}