如何解决使用osmdroid在当前位置上的中心地图
我在Kotlin有一个非常基本的Android应用程序。
我试图将地图的中心放在设备的当前位置,但是myLocationOverlay.myLocation
始终是null
。
我做错什么了吗?我一直在疯狂地谷歌搜索,但似乎无济于事。
谢谢!
class MainActivity : AppCompatActivity() {
private lateinit var map: MapView
private lateinit var mapController: IMapController
private lateinit var myLocationOverlay: MyLocationNewOverlay
override fun onCreate(savedInstanceState: Bundle?) {
// Load and set layout
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Create MapView
map = findViewById(R.id.map)
// Set tile source + display settings
map.setTileSource(TileSourceFactory.MAPNIK)
map.setMultiTouchControls(true)
map.zoomController.setVisibility(CustomZoomButtonsController.Visibility.NEVER)
// Create MapController and set starting location
mapController = map.controller
// Create location overlay
myLocationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(this),map)
myLocationOverlay.enableMyLocation()
myLocationOverlay.enableFollowLocation()
myLocationOverlay.isDrawAccuracyEnabled = true
myLocationOverlay.runOnFirstFix{runOnUiThread {
mapController.animateto(myLocationOverlay.myLocation)
mapController.setZoom(9.5)
}}
map.overlays.add(myLocationOverlay)
// Set user agent
Configuration.getInstance().userAgentValue = "RossMaps"
println(myLocationOverlay.myLocation)
println("Create done")
}
override fun onResume() {
super.onResume()
map.onResume()
}
override fun onPause() {
super.onPause()
map.onPause()
}
}
解决方法
所以我找到了解决方案。我需要先请求ACCESS_FINE_LOCATION的权限。将以下代码添加到onCreate
函数的开头时,对我来说是有效的:
// Request Location permission
if (ContextCompat.checkSelfPermission(
this,Manifest.permission.ACCESS_FINE_LOCATION
) == PERMISSION_GRANTED) {
println("Location Permission GRANTED")
} else {
println("Location Permission DENIED")
ActivityCompat.requestPermissions(
this,arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),1
)
}
当您第一次在AVD模拟器中运行该应用程序时,会弹出一个对话框,要求您提供位置许可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。