[Android-Location]无法从LocationManager获取经纬度

Posted

技术标签:

【中文标题】[Android-Location]无法从LocationManager获取经纬度【英文标题】:[Android-Location]Can not get Longitude and Latitude from LocationManager 【发布时间】:2014-07-12 11:05:05 【问题描述】:

我使用 LocationManager 通过“经度”和“纬度”获取用户地址,但是当我调用 location.getLongitude() 和 location.getLatitude() 时,它返回 0 给我。我设法使用 Google,但没有人遇到我的问题。

Jeremy Edwards 先生建议我:

确保在手机设置中启用了基于网络的位置信息。您可以检测到这种情况并在您确实需要时提示用户启用它。 我相信这是启动此活动的代码行。

我会这样做,但它可以提供帮助。有时给我经度和纬度,有时没有。

这是我的代码:

String locationProvider = LocationManager.NETWORK_PROVIDER;
LocationManager locationManager = (LocationManager) this
            .getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager
            .getLastKnownLocation(locationProvider);

androidMainfest.xml 中的权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

谁能帮帮我?提前谢谢!

【问题讨论】:

你是在模拟器还是手机上试试?如果在模拟器中,则启用 DDMS 设置。如果在手机中,则启用带有街道数据设置的 GPS。 我使用的是 Nexus 4,我会尝试通过街道数据设置启用 GPS。 【参考方案1】:

您试图仅从网络提供商处获取。尝试使用下面的代码。它将帮助您从 GPS 提供商处获取,如果值不可用,那么它将帮助您从网络提供商处获取坐标

// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute



        locationManager = (LocationManager) mContext.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 GPS Provider and no network provider is enabled
         
        else 
           // Either GPS provider or network provider is enabled

            // 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();
                        this.canGetLocation = true;
                    
                
            // End of IF network enabled

            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) 
            
                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();
                        this.canGetLocation = true;
                    
                

            // End of if GPS Enabled
        // End of Either GPS provider or network provider is enabled

【讨论】:

谢谢妮莎!它对我有用,但我想知道为什么我的代码 >Location location = locationManager.getLastKnownLocation(locationProvider);有时会起作用,有时会不起作用。

以上是关于[Android-Location]无法从LocationManager获取经纬度的主要内容,如果未能解决你的问题,请参考以下文章

无法从浏览器下载 .eml 文件

无法从 Flutter 中的 Open Weather API 获取数据

Ansible:从JSON响应创建变量

如何从 Mac OS X 中卸载 MySQL?

python Cosa loca de Django

高德地图测两点距离android比较精确的