【问题标题】:Android: Getting Latitude and LongitudeAndroid:获取纬度和经度
【发布时间】:2026-02-01 14:50:01
【问题描述】:

不去户外就可以得到纬度和经度吗?我目前的情况是用户必须在户外才能获得他们的位置,而他们也需要很长时间才能获得位置。我希望我的用户能够在室内获取他们的位置。

【问题讨论】:

  • 为什么用户需要在户外才能获取他们的位置?是网络问题吗?
  • @Creator GPS 只能在户外运行良好,因为它需要清晰的路径才能从卫星获取数据。当您在室内时,有屋顶和墙壁,因此路径被阻塞,您无法从卫星获取数据。

标签: android google-maps geolocation


【解决方案1】:

是的,有可能,请从以下代码中获取提示:

try {
            gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        } catch (Exception ex) {
        }
        try {
            network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        } catch (Exception ex) {
        }

        if (!gps_enabled && !network_enabled) {
             // show alert 
        }
        if (network_enabled) {
            locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
        }
        if (gps_enabled) {
            locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
        }

【讨论】:

    【解决方案2】:

    是的,有可能,在门内您正在获取您的网络。因此您可以使用LocationManager.NETWORK_PROVIDER 获取 GPS 坐标。

    请看这个answer

    【讨论】:

      【解决方案3】:

      这取决于您使用的 GPS 提供商,以及可用的信号来确定位置,我认为您仅使用 GPS 提供商,所以它不能在室内工作,尝试使用网络提供商也可以考虑。

      另外,使用Last known location,当gps定位到位置时,有一个不错的博客可以最早获取位置。

      android-developers.blogspot.in/2011/06/deep-dive-into-location.html

      【讨论】:

        【解决方案4】:
            LocationManager locManager;   
            Location location;
         double lat;
         double lng;
            try {
                        gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
                    } catch (Exception ex) {
                    }
                    try {
                        network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                    } catch (Exception ex) {
                    }
        
                    if (!gps_enabled && !network_enabled) {
                         // show alert 
                    }
                    if (network_enabled) {
                          locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);                
                        locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000,1, locationListener);
                        location = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                     lat = location.getLatitude();
                     lng = location.getLongitude();
                    }
                    if (gps_enabled) {
                        locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);              
                        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1, locationListener);
                        location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                     lat = location.getLatitude();
                     lng = location.getLongitude();
                    }
        

        【讨论】: