2013-11-03 20 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