android - 如何使用片段中的位置准确性不断更新文本视图
问题描述
我想每 2 秒更新一次用户的位置准确性。
我创建了这个函数getAccuracy(activity, currentAccuracy)
,它在调用时使用当前位置更新 textView。
我希望它每 2 秒调用一次。这是我当前的代码,但它不起作用 - 文本甚至一次都没有获得值并且保持空白,如果我在没有 runOnUiThread 的情况下使用该函数,它将至少显示一次。
val activity = activity as CameraActivity
val handler = Handler()
val delay: Long = 2000 //milliseconds
handler.postDelayed(object : Runnable {
override fun run() {
activity.runOnUiThread {
object : Runnable {
override fun run() {
getAccuracy(activity, currentAccuracy)
}
}
}
handler.postDelayed(this, delay)
}
}, delay)
这是函数,使用AirLocation库
fun getAccuracy(activity: Activity, currentAccuracy: TextView) {
airLocation = AirLocation(activity, true, true, object : AirLocation.Callbacks {
override fun onSuccess(location: Location) {
currentAccuracy.text = location.accuracy.toString()
Log.d("locationAccuracy","Success")
}
override fun onFailed(locationFailedEnum: AirLocation.LocationFailedEnum) {
Log.d("locationAccuracy","Fail")
}
})
}
解决方案
您每 2 秒重新创建AirLocation
一次实例,这并不好,因为它可能没有足够的时间来获取位置数据。您应该使用相同的实例。要解决问题...
您应该使该airLocation
变量成为该类的私有成员变量。我想你已经这样做了...
class YourActivity : AppCompatActivity() {
private var airLocation: AirLocation? = null
}
然后初始化该变量onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
airLocation = AirLocation(this, true, true, object: AirLocation.Callbacks {
override fun onSuccess(location: Location) {
if(location != null){
currentAccuracy.text = location.accuracy.toString()
}
}
override fun onFailed(locationFailedEnum: AirLocation.LocationFailedEnum) {
}
})
}
然后覆盖onActivityResult
并调用AirLocation
'sonActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
airLocation?.onActivityResult(requestCode, resultCode, data)
super.onActivityResult(requestCode, resultCode, data)
}
假设您正在处理所需的权限并且位置设置已打开,这应该可以工作。不幸的是,这个库不允许您设置位置请求之间的间隔,间隔设置为 10 秒,最快间隔设置为 2 秒,您无法更改。这是源代码的片段......
val locationRequest = LocationRequest().apply {
interval = 10000
fastestInterval = 2000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
numUpdates = 1
}
但是,如果控制间隔对您来说至关重要,您可以构建自己的实现。这并不难。祝你好运
推荐阅读
- javascript - React js乘/除数
- sql - 基于特定日期的自我加入和聚合(红移)
- javascript - 可以将成员函数添加到 JavaScript 中的 Array 类而不显示在 for-in 循环中吗?
- dataframe - 如何在名称符合特定条件的少数列上使用强制转换
- android - 无法解析符号 R.raw
- php - Laravel 检索一个 cookie 值
- python - 我的 Beautiful Soup 代码返回 TypeError: 'NoneType' object is not iterable
- wordpress - 我们可以在 wp bakery 的视觉作曲家的 wordpress 的单页上同时使用手风琴和制表符吗?
- python - 从字符串中提取数字的大多数 Pythonic 方法
- javascript - SVG 多边形无法突出显示