2012-06-06 386 views
4

我試圖獲取當前位置Android中使用的LocationManager和LocationListener的作爲http://developer.android.com/guide/topics/location/obtaining-user-location.html的LocationManager requestLocationUpdates不起作用

然而,LocationListener的的onLocationChanged方法不會被調用描述。我使用了一個真正的android手機/也使用了仿真器和仿真位置,使用telnet進行了更改,如上面的鏈接所述。

這裏是我的代碼:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     /* Use the LocationManager class to obtain GPS locations */ 
     LocationManager mlocManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new CustomLocationListener(
       getApplicationContext()); 
     // Location Providers 
     String locationProvider = LocationManager.NETWORK_PROVIDER; 
     // LocationProvider locationProvider = LocationManager.GPS_PROVIDER; 
     mlocManager 
       .requestLocationUpdates(locationProvider, 0, 0, mlocListener); 
    } 
} 

和我LocationListener的:

public class CustomLocationListener implements LocationListener { 

    private Context m_context; 

    public CustomLocationListener(Context context) { 
     m_context = context; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     String Text = latitude + " " + longitude; 
     Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} 
} 

所以onLocationChanged永遠不會被調用。 任何人都可以看到問題? 非常感謝

+0

您是否啓用了手機上的GPS服務,並確認您應該擁有一個位置? (等待幾分鐘不是一個確認,如果你在一個很差的服務區30分鐘可能是不夠的...) – Sam

+0

得問:你有清單中指定的位置權限? – dymmeh

+0

@dophie是的,我已經在清單中添加了許可 –

回答

1

確保在「設置」中啓用了正確的位置服務。您也可以使用isProviderEnabled()來檢查您選擇的特定供應商是否可以使用。並確保您的清單中具有COARSE或FINE位置權限。

此外,請確保您在設備上進行測試。網絡位置在模擬器中根本不起作用,並且只有在您使用模擬工具注入新數據點時,GPS纔會起作用。

+0

不幸的是,'isProviderEnabled()'不能像宣傳的那樣工作。請參閱:http://stackoverflow.com/questions/10154937/isproviderenabledlocationmanager-network-provider-return-false和http://stackoverflow.com/questions/16748300/locationmanager-isproviderenabledlocationmanager-network-provider-is-not-relia – Jules

3

你也可以讓你的手機確定最佳的提供商,而不是隻設置

String locationProvider = LocationManager.NETWORK_PROVIDER; 

試試這個:

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setAltitudeRequired(false); 
criteria.setBearingRequired(false); 
criteria.setCostAllowed(true); 
criteria.setPowerRequirement(Criteria.POWER_LOW); 
String locationProvider = mlocManager.getBestProvider(criteria, true); 

此外,有你在你的設備移動到新的位置進行測試?否則,「onlocationchanged」事件可能不會觸發。當我在幾年前計算出這些東西時,當我在這個區塊周圍散步以確認事件正在發射時,我放入了一些「吐司」以提醒我經緯度座標。

+1

我怎樣才能讓模擬器「去一個新的位置」? –

+1

@MathiasLykkegaardLorenzen:我總是用一個設備開發,但是如果你按照上面Dan Dinu的原始問題的鏈接,它看起來像你可以模擬仿真器中的位置。轉到該文章的底部,並參閱「在模擬器控制檯中使用」geo「命令」。 – CircuitBreaker716

3

對我來說這看起來像Android Bug 57707

如果是這樣,至少在一段時間內重新啓動設備應該會有所幫助。可以使用Google Play Services Location API

通過使用Wifi,GPS和網絡定位,Google Play服務位置API將隱藏網絡定位被破壞的事實;這隻有在你既沒有GPS也沒有Wifi時纔會很明顯。

0

我遇到過類似的問題。 Try replacing getApplication() with MainAvtivity.this

此外,請確保您保持FINE和COARSE位置的權限。如果您的目標API超過23個,您還應該從Java代碼處理權限。

相關問題