2013-11-03 21 views
0

我们有一个强大的GPS信号,我有测试GPS锁定有多快能够建立我甚至测试了我的手机上的导航软件,他们都得到了应用相当,如果我多斯塔锁波纹管10只打开GPS。应用程序从未收到GPS定位

但有了这个程序,我只是从来没有得到一个锁,诡计循环只是不断走下去,和日志从来没有显示我让它运行10分钟并没有什么。我在这里错过了什么我知道有一个可能> 10分钟的延迟,但其他应用程序没有使用lastKnownLocation的问题,但拉了一个实际的位置。

此外,gpsLocation()方法位于静态Locator类中。

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 

    Location location = Locator.gpsLocation(this); 

    while(location == null) 
    { 
     location = Locator.gpsLocation(this); 
    } 

    Log.w("GPS LOCATION", "LOCATION FOUND"); 


    } 

    /** 
    * Finds users location using gps 
    * satelite network. 
    * 
    * @param FragmentActivity 
    * @return Location 
    */ 
    public static Location gpsLocation(FragmentActivity context) 
    { 
    // Fetch LocationManager service & instance of UserLocator 
    LocationManager provider = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    UserLocator  locator = new UserLocator(); 

    // Attempt to get a fix on users location 
    provider.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locator); 

    // Return users location using GPS Service 
    return locator.location; 
    } 

    /** 
* Use to listen for user location updates 
* TODO: Reimplement as a anonymous class 
*/ 
    class UserLocator implements LocationListener 
    { 
    // Public accessor 
    public Location location; 
    public void onLocationChanged(Location location) 
    { 
     if(location != null) 
     { 
     // We have a fix on users location 
     this.location = location; 
     } 
    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    } 
+0

您是否声明了您的权限? – Bob

+0

@Bob是的,我有所有权限设置 –

回答

1

我觉得你的问题是,你的位置更新侦听器更新用户位置类中的位置变量,但要检查的变量是你从方法gpsLocation,这是空回一个。

你在做什么是你所注册的位置更新和立即返回的空值,并一遍又一遍地检查它,而你真正的位置是在另一个地方被更新。

所有这一切都假设您已经在清单文件中声明了适当的权限。

试试这个:

Location location; 

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    gpsLocation(this); 
    while(location == null) 
     continue; 
    Log.w("GPS LOCATION", "LOCATION FOUND"); 
} 


public static void gpsLocation(FragmentActivity context) 
{ 

    LocationManager provider = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    UserLocator  locator = new UserLocator(); 
    provider.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locator); 
} 


    class UserLocator implements LocationListener 
    { 
     public void onLocationChanged(Location loc) 
     { 
      if(loc != null) 
       location = loc; 

    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
} 

使用这种实现,无论是听众和while循环地址位置的同一个实例,所以这一次从零变化,你会得到的日志信息。

我不过强烈建议不要把这样的一段时间(true)循环在你onCreate方法,你会阻塞主线程,而这通常是一个坏事情。

+0

是否有可能第一次运行此代码,它检测到我的位置,现在onChangeLocation没有抛出任何新东西,因为它有一些位置缓存,然后我没有改变我的位置? –

+0

我认为它确实为您提供了新的位置。然而,这段代码只会在日志中第一次发生。如果您想真正看到每个新的位置修复,请尝试将Log.w语句放在位置侦听器中,位于onLocationChanged中的if块内部。 – Bob