我只想编写一个返回纬度和经度的方法。我有一个带有按钮和两个文本字段的活动。我正在使用的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上运行它,当我运行谷歌地图时似乎没有任何问题。
答案 0 :(得分:0)
由于Android在没有应用请求时不会跟踪位置,以节省电池电量。 GetLastKnownLocation几乎总是返回null。如果您想要确保非空响应,请使用requestLocationUpdates或requestSingleLocation。这两个都是异步的,所以他们会在找到位置时调用回调(实际上找出一个位置可能需要几秒到一两分钟,具体取决于位置提供者的类型,大气条件,视线问题等。如果使用GPS而且内部实际上可能永远不会发生。)
答案 1 :(得分:0)
如果按下按钮后尝试返回GPS坐标,那么您可能还没有存储现有的GPS位置。您应该使用requestLocationUpdates
而不是getLastKnownLocation
。
locationManager.requestLocationUpdate(LocationManager.NETWORK_PROVIDER, 5000, 0, locationListener)
当您使用requestLocationUpdate
时,它会自动为您拨打onLocationChanged
,因此您无需在代码中调用它。
您可以将LocationManager.NETWORK_PROVIDER
替换为LocationManager.GPS_PROVIDER
,但只要您有WiFi连接,就可以获得坐标。
答案 2 :(得分:0)
如果要在内部使用此功能,请尝试将GPS_PROVIDER
切换为NETWORK_PROVIDER
;在手机可以服务的任何地方都可以使用。