我想每2秒更新一次用户的定位准确性。
我已经创建了此函数free (example_node->left);
free (example_node->right);
free (example_node);
,该函数在每次调用textView时都会使用当前位置对其进行更新。
我希望每2秒调用一次。这是我当前的代码,但是不起作用-文本即使一次也没有得到值,并保持空白,如果我使用没有runOnUiThread的函数,它将至少显示一次。
getAccuracy(activity, currentAccuracy)
这是使用AirLocation库的函数
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)
答案 0 :(得分:1)
您每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
的{{1}}
onActivityResult
如果您正在处理必需的权限并且位置设置已启用,则该方法应该可以工作。 不幸的是,该库不允许您设置位置请求之间的间隔,该间隔设置为10秒,最快间隔为2秒,您无法更改。这是源代码的片段...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
airLocation?.onActivityResult(requestCode, resultCode, data)
super.onActivityResult(requestCode, resultCode, data)
}
但是,如果控制间隔对您至关重要,则可以构建自己的实现。没那么难。祝你好运