我是Android开发的初学者。我创建了一个小应用程序,可以在设备达到一定速度后拍照。但是,requestLocationUpdates方法的一个参数(当然用于跟踪用户的位置)在第三个参数中需要一个Looper。我该如何制作一个活套?它应该去哪里?我的requestLocationUpdates方法目前看起来像这样:(我用null代替Looper)
app.subscriber.object_transformer_elastica:
class: AppBundle\EventSubscriber\ElasticaTransformSubscriber
arguments: ["@fpn_tag.tag_manager"]
tags:
- { name: kernel.event_subscriber }
Android开发网站建议做这样的事情:
protected void requestUpdates() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
MC.requestLocationUpdates(locRequest, mLocationCallback, null);
}
}
但是,我仍然不知道在哪里放置这段代码,一旦我把它放进去怎么办,或者我如何在我的MainActivity中使用它。任何建议将不胜感激。
答案 0 :(得分:1)
正如@Markus在评论中所说,如果this
已经实施Activity
界面,您可能需要通过LocationListener
。这是您需要的第三个参数,而不是Looper
。
答案 1 :(得分:0)
通过以下代码创建looper。
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
// Now get the Looper from the HandlerThread
// NOTE: This call will block until the HandlerThread gets control and initializes its Looper
Looper looper = handlerThread.getLooper();
并将requestLocationUpdates()中的looper对象作为peramiter传递如下。
MC.requestLocationUpdates(locRequest, mLocationCallback, looper);
答案 2 :(得分:0)
如果您的回叫无法访问磁盘且速度很快,则可以通过null
。
引用documentation,您应该通过
一个Looper对象,其消息队列将用于实现回调机制,或null以在调用线程上进行回调
如果你在主线程上调用requestLocationUpdates
并将null
作为Looper传递,那么你将在主线程上收到回调。
您无法从主线程访问网络,也不应在主线程上执行任何I / O操作。你的UI会开始滞后。