gpt4 book ai didi

android - 如何在没有互联网连接的情况下在android中获取当前的确切位置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:51 25 4
gpt4 key购买 nike

我想在 android 中获取当前的确切位置坐标。如果手机连接到 Wifi 互联网连接,我可以获取位置,但在其他情况下,当我去其他地方并且没有可用的互联网连接时,它不会提供当前位置坐标。而不是给出最后的位置坐标。

例如:

目前我在 A 城市并通过 wifi 连接获取当前坐标并移动到城市 B 然后我无法获取当前坐标。取而代之的是给出最后的位置坐标。

任何人都可以建议我如何在没有互联网连接的情况下获取当前位置。

public Location getLocation() {
try {
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);

// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

// getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
// First get location from Network Provider
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}

// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}

} catch (Exception e) {
e.printStackTrace();
}

return location;
}

/**
* Stop using GPS listener
* Calling this function will stop using GPS in your app
* */
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GetLocations.this);
}
}

/**
* Function to get latitude
* */
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
return latitude;
}

/**
* Function to get longitude
* */
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
return longitude;
}

最佳答案

您显示的代码只是您类的 getLocation 方法。大概您的类也实现了 LocationListener,对吗? (假设它没有看到它,因为您在 requestLocationUpdates 中将“this”指定为监听器。)

您显示的方法只会返回最后已知的位置,因为通过提供商进行的位置更新是异步的。你表明你想通过注册一个监听器来获取位置信息,并且监听器会定期获取更新(基于你给它的设置,并基于实际的设备功能和环境)。您不会在注册后立即取回位置。

对于您的问题,在未连接到网络时获取位置信息,您将需要使用 GPS 提供商(它在未连接到数据网络时工作)。一旦您注册了一个 GPS 提供商监听器(因为您已经拥有),您将通过监听器中的回调获取位置更新,onLocationChanged(Location location)

您的 onLocationChanged 回调有什么作用?

注册 GPS 提供商后,您将在几秒到几分钟内获得更新的位置信息(多久取决于您使用的设备中的硬件和环境条件,GPS 使用多颗卫星并且工作速度更快在天空清晰的情况下,如果您在室内或信号受阻,它可能根本无法工作)。

除了等待监听器为您提供更新的位置信息外,您可能还需要考虑使用一些更简单、独立的方法来获取最后已知的位置并注册最佳提供商。您可以使用一些简单的循环和您感兴趣的 Criteria(COARSE 与 FINE,是否为 LOW_POWER,等等)。

Android 开发人员在文档、“Protips for Location”开源示例应用程序和“Deep Dive”博客文章(包含指向其中所有其他资源的链接):http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html 中对此进行了很好的记录。

关于android - 如何在没有互联网连接的情况下在android中获取当前的确切位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com