我只是想编写一个返回纬度和经度的方法。我有一个带有按钮和两个文本字段的 Activity 。我使用的 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
。
我尝试this solution但它不起作用。其他示例是在 onResume
中调用该函数,但我确实需要在 startGPS
方法中调用该函数。
此外,错误是否有可能仅与我的设备有关?我在 Nexus 7 上运行它,当我运行 Google map 时似乎没有任何问题。
最佳答案
如果在按下按钮后尝试返回 GPS 坐标,则很可能您尚未存储现有的 GPS 位置。您应该使用 requestLocationUpdates
而不是 getLastKnownLocation
。
locationManager.requestLocationUpdate(LocationManager.NETWORK_PROVIDER, 5000, 0, locationListener)
当您使用 requestLocationUpdate
时,它会自动为您调用 onLocationChanged
,因此您无需在代码中调用它。
您可以用 LocationManager.NETWORK_PROVIDER
替换 LocationManager.GPS_PROVIDER
,但只要您有 WiFi 连接,您就应该能够获取坐标。
关于java - Android 位置对象始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035485/