2011-08-11 51 views
1

我已经实现了应该返回当前位置的代码。android onLocationChanged从来没有调用

首先代码:

public static double[] getLocation(Context context) { 
     double[] result; 
     lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
     MyLocationListener ll = new MyLocationListener(); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 

     while(!hasLocation) { } 

     result = ll.getResult(); 

     return result; 
    } 

    private static class MyLocationListener implements LocationListener { 
     double[] result = new double[2]; 

     public double[] getResult() { 
      return result; 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      if(location.getAccuracy() != 0.0 && location.getAccuracy() < 100) { 
       result[0] = location.getLatitude(); 
       result[1] = location.getLongitude(); 
       hasLocation = true; 
       lm.removeUpdates(this); 
      } 
     } 

     @Override 
     public void onProviderDisabled(String provider) {} 

     @Override 
     public void onProviderEnabled(String provider) {} 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
    } 

的问题是, '而' 声明所有stopps。当我试图调试在onLocationChanged()什么也没发生的第一行该设置断点,但在logcat中显示像一些日志:

loc_eng_report_position: vertical_accuracy = 64.000000 
DEBUG/libloc(1292): date:2011-08-11, time:10:51:03.372, raw_sec=1313052663, raw_sec2=1313052663,raw_msec=1313052663372 

任何想法?

回答

2

while(!hasLocation){}阻止您的应用程序执行任何操作。您需要在onLocationChanged处理回调中的位置,或者您需要更早地启动位置管理器,并希望在您需要的时候获得结果。你不能忙 - 等待答案。

+0

我想等线程获取位置,然后返回结果。我应该将requestLocationUpdates()移动到单独的线程吗? – Seraphis

+0

好吧,我把它移动到与Looper分开的线程。现在它正在工作。删除更新仍然存在问题。 GPS图标消失得太慢。不知道为什么。无论如何,谢谢你的建议:-) – Seraphis

相关问题