在Xamarin中获取位置GPS数据时,无法在线程内创建处理程序

时间:2017-11-30 15:46:43

标签: c# multithreading xamarin gps

我已经实现了一种获取设备位置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数据吗?

1 个答案:

答案 0 :(得分:0)

根据android documentation

  

如果使用了LocationListener但没有指定Looper,那么   调用线程必须已经是一个Looper线程,例如主线程   调用Activity。如果指定了一个Looper   LocationListener然后在提供的Looper上进行回调   线程。

因此,如果您的计划是在单独的线程上运行位置侦听器,则需要创建Looper线程。