[英]Android Location Object Always Null
我只是想寫一個返回緯度和經度的方法。 我有一個帶有按鈕和兩個文本字段的活動。 我正在使用的java類擴展AppCompatActivity
並實現LocationListener
按下按鈕時,按下以下方法:
public void startGPS(View view)
{
// Here is the code to handle permissions - you should not need to edit this.
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION }, TAKE_PHOTO_PERMISSION);
}
Location location = locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, this);
}
后來我嘗試在我的onLocationChanged
方法中打印出我的位置,但它導致應用程序崩潰。 我通過調試器運行它,發現該位置始終為null
。
我試過這個解決方案,但它沒有用。 其他示例是在onResume
中調用函數,但我真的需要在startGPS
方法中。
此外,錯誤是否恰好與我的設備有關? 我在Nexus 7上運行它,當我運行谷歌地圖時似乎沒有任何問題。
因為Android沒有應用程序請求時不跟蹤位置,以節省電池。 GetLastKnownLocation幾乎總是返回null。 如果您想要確保非空響應,請使用requestLocationUpdates或requestSingleLocation。 這兩個都是異步的,所以他們會在找到位置時調用回調(實際上找出一個位置可能需要幾秒到一兩分鍾,具體取決於位置提供者的類型,大氣條件,視線問題等。如果使用GPS而且內部實際上可能永遠不會發生。)
如果在按下按鈕后嘗試返回GPS坐標,那么您可能還沒有存儲現有的GPS位置。 您應該使用requestLocationUpdates
而不是getLastKnownLocation
。
locationManager.requestLocationUpdate(LocationManager.NETWORK_PROVIDER, 5000, 0, locationListener)
當您使用requestLocationUpdate
它會自動為您調用onLocationChanged
,因此您無需在代碼中調用它。
您可以將LocationManager.NETWORK_PROVIDER
替換為LocationManager.GPS_PROVIDER
但只要您有WiFi連接,您就應該能夠獲得坐標。
如果您嘗試使用此內部嘗試將GPS_PROVIDER
切換到NETWORK_PROVIDER
; 這適用於手機有服務的任何地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.