2012-07-26 52 views
0

目標:確定GPS位置一次,然後將緯度/經度放入兩個單獨的EditText框中以向用戶顯示。Android GPS定位,不會傳遞位置

問題:我測試了我的方法,它在模擬器中正常工作,我發送它的GPS座標,它工作正常和丹迪。我在兩個獨立的設備(v2.1手機,v4.0 ICS平板電腦)上試用它,並且GPS圖標出現在通知中(都很好),但只是在那裏試圖確定位置。我已經測試了很多次,並且每次測試都給了大量時間。 編輯:當我走出去時,在手機上正常工作,所以我可以穿過這個。平板電腦仍然有問題。

我在布里斯班的中心,所以我懷疑它是一個位置問題 - 此外,谷歌地圖通過GPS定位我的工作得很好。

如果我關閉GPS,所以它默認回到網絡定位,它工作得很好,給我的位置。方法:

方法:

(我調用的方法);

public void locateCoordinates(EditText latitudeInput, EditText longitudeInput) { 
    // Find coordinates, place them in EditText boxes. 

    // Create the locating services if needed 
    if(locManager == null) { 
     locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    } 
    if(locListener != null) { 
     // Unregister listener from locManager (in case of double click of Locate button) 
     locManager.removeUpdates(locListener); 
    } 
    locListener = new LocListenerImpl(locManager, latitudeInput, longitudeInput); 

    if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     locManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 0, 0, locListener); 
    } else if(locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
     locManager.requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 0, 0, locListener); 
     Toast.makeText(this, 
       "GPS unavailable, trying network-based location instead.", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, 
       "No locating methods enabled", Toast.LENGTH_SHORT).show(); 
    } 

} 

(Listener Implementation Class);

public class LocListenerImpl implements LocationListener { 

    private LocationManager locManager = null; 
    private EditText latitudeInput = null; 
    private EditText longitudeInput = null; 

    public LocListenerImpl(LocationManager locManager, EditText latitudeInput, EditText longitudeInput) { 
     this.latitudeInput = latitudeInput; 
     this.longitudeInput = longitudeInput; 
     this.locManager = locManager; 
    } 

    public void onLocationChanged(Location location) { 
     if(location != null) { 
      latitudeInput.setText(String.valueOf(location.getLatitude())); 
      longitudeInput.setText(String.valueOf(location.getLongitude())); 
      locManager.removeUpdates(this); // Location found, unregister listener 
     } 
    } 

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

我很努力地看到我做錯了什麼或者是什麼原因造成了這種情況。任何幫助感謝!

+0

你是否在一個結構或以某種方式沒有一個清晰的天空視圖? – npinti 2012-07-26 05:16:38

+0

我剛從外面走進了晴朗的藍天,試了一下,在我的手機上工作,但不是我的平板電腦。 我的平板電腦是華碩Eee Pad變壓器,所以它不是cheapie – TechnIx 2012-07-26 05:38:37

+0

看看你是否可以在另一臺平板電腦上,或者嘗試在平板電腦上下載一些取決於應用程序的GPS並查看它是否有效。您的產品可能有缺陷。 – npinti 2012-07-26 05:47:18

回答

0

嘗試把locManager.removeUpdates(這一點)這像的onStop(),或在同樣的方法裏其他環路其他一些方法

0

你的代碼看起來完全OK,所以必須用你的設備是問題..

有時需要10分鐘左右的時間才能獲得適當的GPS鎖定。當您沒有互聯網連接時,無法從互聯網上下載關於衛星星曆的粗略數據,因此需要很長時間才能找到衛星。即使你對天空有清晰的看法。

網絡提供商是即時在另一邊,所以只是嘗試等待更長時間。或者嘗試重新啓動您的設備,或嘗試取消選中並檢查位置設置中的位置服務複選框(幫助一些無法使用的人或嘗試下載GPS status應用程序,在那裏你可以看到關於GPS的一些更具體的數據(上次修復,首次修復時間,aGPS數據狀態,衛星細節,..)

+0

謝謝,我會在我的平板電腦上試用該應用程序,並回復您。 – TechnIx 2012-07-26 05:52:16

+0

(我以爲我點擊添加評論,但它似乎並沒有通過,所以這裏又是:) GPS狀態應用程序在平板電腦上工作正常。允許它下載一個GPS數據,但它仍然沒有幫助我的應用程序獲取位置。 可能很適合我的設備。 – TechnIx 2012-07-26 06:31:53

+0

而GPS狀態應用程序本身獲得GPS修復?它根本無助於其他應用程序,但你可以看到有關GPS的詳細信息。正如我所說的,代碼看起來不錯,我期望它是與設備相關的問題。 – simekadam 2012-07-26 06:45:39

0

一個可能的設備無法獲取位置的原因是,如果沒有清晰的天空視圖,它們無法連接到衛星。您通過網絡獲取位置(單元格三角測量),因爲它只需要運營商提供商確定位置。谷歌地圖使用所有可用方法(Wi-Fi,網絡,GPS)的混合來定位。對於在真實設備上測試,我建議你去露天,並有一些新鮮空氣:)

+0

這爲我的手機工作,設法得到GPS位置很快。平板電腦仍然保持圖標在那裏幾分鐘,永遠不會得到一個位置。 在我的辯護中,我前段時間嘗試過「走出去」的想法,但是它正在下大雨,所以也許這就是停止它的工作。 :) – TechnIx 2012-07-26 05:50:19