簡體   English   中英

Android位置對象始終為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM