【发布时间】:2023-01-31 18:13:41
【问题描述】:
我想为我的天气应用程序制作简单的小部件,以显示当地温度。我的问题是:如何获得位置追踪器在我的小部件类中?
class Widget: GlanceAppWidget() {...}
【问题讨论】:
-
所以,我找到了解决方案:
标签: location android-jetpack-compose android-widget glance-appwidget glance
我想为我的天气应用程序制作简单的小部件,以显示当地温度。我的问题是:如何获得位置追踪器在我的小部件类中?
class Widget: GlanceAppWidget() {...}
【问题讨论】:
标签: location android-jetpack-compose android-widget glance-appwidget glance
我找到了解决方案,我使用 fusedLocationProviderClient
//client
val locationProviderClient =
LocationServices.getFusedLocationProviderClient(context)
所以,我的方法获取位置:
> //get location
private suspend fun getCurrentLocation(
context: Context,
locationClient: FusedLocationProviderClient
): Location? {
val hasAccessFineLocationPermission = ContextCompat.checkSelfPermission(
context,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
val hasAccessCoarseLocationPermission = ContextCompat.checkSelfPermission(
context,
Manifest.permission.ACCESS_COARSE_LOCATION
) == PackageManager.PERMISSION_GRANTED
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
val isGpsEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) ||
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
if (!hasAccessCoarseLocationPermission || !hasAccessFineLocationPermission || !isGpsEnabled) {
return null
}
return suspendCancellableCoroutine { cont ->
locationClient.lastLocation.apply {
if (isComplete) {
if (isSuccessful) {
cont.resume(result)
} else {
cont.resume(null)
}
return@suspendCancellableCoroutine
}
addOnSuccessListener {
cont.resume(it)
}
addOnFailureListener {
cont.resume(null)
}
addOnCanceledListener {
cont.cancel()
}
}
}
}
【讨论】: