检索纬度和经度时出错

时间:2017-04-27 15:18:14

标签: android gps avd

这是我的问题:

我尝试了本教程以获得设备的经度和纬度: http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

它在我的手机上运行良好(API 17),但在仿真手机(API 25)和仿真电视(API 24)上都无法正常工作。我总是得到纬度0.0和经度0.0

 public Location getLocation() {
            try {
                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) {
                    //if internet and gps doesn't work
                } 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);
                        Log.d("Network", "Network");
                        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);
                            Log.d("GPS Enabled", "GPS Enabled");
                            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;
        }

经过一些测试,我在这里找到了:

locationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

代码进入了捕获。

有谁知道为什么它适用于我的手机而不是Android模拟设备?

1 个答案:

答案 0 :(得分:0)

我找到了答案:我在AVD API 22上尝试了我的代码,它运行得很好所以这个代码在API 23之前是好的,那么你必须使用另一个。 如果我找到一个正常工作的代码,我会发布它。

修改

代码很好,只是在api> = 23中你必须询问用户你是否正在使用“危险许可”