android - 使用 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 模拟器中运行应用程序时,会出现一个弹出窗口,询问位置权限。
推荐阅读
- apache-flink - Flink StreamingFileSink - ParquetAvroWriters
- php - PHP 将 XMLNode 嵌入到 CDATA 部分
- bash - 为什么我的 bash if 语句不断返回 true?
- flutter - 当我将正文对象从 Flutter 发送到 node.js 时 Json 解析问题,而它与邮递员完美配合
- angular - 无法使用 Ngrx 一次从不同的商店获取最新状态
- rollupjs - 如何防止汇总重命名唯一或范围函数/变量?
- cassandra - 通过 SAI 字段在 Cassandra (Spark) 中执行 SELECT 时。返回的行的顺序是什么?
- xml - 在 xml 中为选择字段 odoo 设置默认值
- java - Java 错误的趋势线计算
- data-structures - 二分图