繁体   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