我已经实现了一种获取设备位置GPS数据的方法。问题是当我从主线程运行应用程序时,即通过我的手机上手动启动应用程序,它会显示正确的GPS数据。
但是我已经实现了一个后台服务,应该继续在一个单独的线程上运行。这项服务应该能够获得GPS数据。
所以基本上,当我实例化以下LocationGPS data = new LocationGPS()
时,应该获得位置GPS数据,因为GPS逻辑嵌入在类本身的构造函数中。新线程中的部分代码位于:
Thread t = new Thread(() =>
{
Task.Run(async () =>
{
LocationGPS data = new LocationGPS();
});
});
但是在调试模式下,我收到以下错误:
无法在未调用的线程内创建处理程序 Looper.prepare()
另外,我所理解的是,location方法必须在UI线程上显式运行。
有人可以帮我处理这个错误,以便在后台服务中正确获取GPS数据吗?
答案 0 :(得分:0)
根据android documentation:
如果使用了LocationListener但没有指定Looper,那么 调用线程必须已经是一个Looper线程,例如主线程 调用Activity。如果指定了一个Looper LocationListener然后在提供的Looper上进行回调 线程。
因此,如果您的计划是在单独的线程上运行位置侦听器,则需要创建Looper线程。