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