Android - 获取当前位置无效
Android - Get the current location not working
我在获取 LocationManager 对象时遇到问题。该代码应该适用于所有 Android API 但是在我的测试中我发现 LocationManager 不只在 25 API.
中为空
fun invokeLocalization(): Location? {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val locationManager = ctx.applicationContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
if ( ctx.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
var bestLocation: Location? = null
for (provider in locationManager.getProviders(true)) {
val location = locationManager.getLastKnownLocation(provider) ?: continue
if (bestLocation == null || location.accuracy < bestLocation.accuracy) bestLocation = location
}
return bestLocation
} else {
(ctx as AddAlertActivity).requestPermissions(arrayOf(LocationManager.GPS_PROVIDER),PackageManager.PERMISSION_GRANTED)
return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
}
}
return null
}
还有我的清单
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.location.gps" />
在 android 的设置中启用了本地化权限。
我将感谢你的帮助。
使用来自 google 的 FusedLocation API 获得更新的位置或最后已知的位置
https://developers.google.com/location-context/fused-location-provider/
我在获取 LocationManager 对象时遇到问题。该代码应该适用于所有 Android API 但是在我的测试中我发现 LocationManager 不只在 25 API.
中为空 fun invokeLocalization(): Location? {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val locationManager = ctx.applicationContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
if ( ctx.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
var bestLocation: Location? = null
for (provider in locationManager.getProviders(true)) {
val location = locationManager.getLastKnownLocation(provider) ?: continue
if (bestLocation == null || location.accuracy < bestLocation.accuracy) bestLocation = location
}
return bestLocation
} else {
(ctx as AddAlertActivity).requestPermissions(arrayOf(LocationManager.GPS_PROVIDER),PackageManager.PERMISSION_GRANTED)
return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
}
}
return null
}
还有我的清单
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.location.gps" />
在 android 的设置中启用了本地化权限。
我将感谢你的帮助。
使用来自 google 的 FusedLocation API 获得更新的位置或最后已知的位置
https://developers.google.com/location-context/fused-location-provider/