如何等待我的线程到大于零的纬度和经度

Posted

技术标签:

【中文标题】如何等待我的线程到大于零的纬度和经度【英文标题】:How to wait my thread up to the latitude and longitude greater than zero 【发布时间】:2013-05-22 22:40:46 【问题描述】:

在我的 android 应用程序中有一个启动屏幕,它检查 gps 并获取纬度和经度。当用户打开 gps 并运行我的应用程序时,它不会等待位置修复。该应用程序只显示一个错误对话框并退出。所以我插入了一些代码等待执行到大于零的经纬度。但这不起作用。它只是等待和等待。任何帮助将不胜感激。

这是我的代码

    if(gps.getLatitude()==0.0&&gps.getLongitude()==0.0)
    while(gps.getLatitude()>0.0&&gps.getLongitude()>0.0)
    try 
    new Thread() 
     public void run() 
       try
     // calling background Async task to load Google Places
     new LoadPlaces().execute();
      
        catch (Exception e) 
         Log.e("inside thread", e.getMessage());
    
                                                                       
   .wait();
   catch (InterruptedException e) 
 // TODO Auto-generated catch block
    e.printStackTrace();
 
    
    
   else
 // calling background Async task to load Google Places
 new LoadPlaces().execute();
   

【问题讨论】:

Lat 和 lng 可以是负数也可以是正数!(gps.getlatitude==0) 就这样,你还在等什么来自 gps 的坐标? 如果 lat 和 lng 都是正数,您的 while 循环将继续执行并等待 如果刚刚打开gps,位置值为null,因此纬度和经度值将为0.0,因为它不能为null,其类型为double @agen451 您正在线程中加载异步任务。请检查链接@developer.android.com/reference/android/os/AsyncTask.html。我还评论了您之前看起来相似的问题 @Raghunandan,因为他没有明确启动线程。他的可运行代码将在同一个现有线程中运行。 【参考方案1】:

您的 UI 线程不应该执行像 Thread.wait() 这样的阻塞调用:这样做会冻结整个线程,从而导致应用程序无响应 (ANR) 对话框(或死锁或终止)。阅读有关 Processes and Threads 和 Keeping Your App Responsive 的 Android 开发人员指南:在开始编写多线程代码之前,了解它们所涵盖的内容很重要。

然后,通读Making Your App Location-Aware 指南:特别是Receiving Location Updates。这解释了如何获取最后一个已知位置(如果有),并实现 LocationListener 以接收更新。

【讨论】:

如果我在这个 if 块中使用另一个异步任务来检索大于 0 的位置会更好吗? 您使用多少AsyncTasks 并不重要:重要的是您不会在UI 线程中阻塞等待它们中的任何一个。在这种情况下,您可能不想启动任何额外的任务:定位服务已经是一个单独的进程。您要做的是创建并注册一个LocationListener,如这些指南中所述,以接收回调并更新您的 UI(例如,通过关闭启动屏幕)。【参考方案2】:

您可以使用 LocationListener.onLocationChanged 来查看位置变化

【讨论】:

以上是关于如何等待我的线程到大于零的纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

如何获取地址的纬度和经度?

使用前向地理编码获取iOS中许多地址的纬度和经度时如何添加延迟?

如何让安卓等待?

如何合并纬度和经度作为输入?

Android:如何获取经度和纬度的当前位置?

无法将我的纬度或经度附加到 html 文档?