Android 如果GPS被禁用,三星手机将无法获取位置信息

Android 如果GPS被禁用,三星手机将无法获取位置信息,android,google-maps,gps,location,Android,Google Maps,Gps,Location,我使用三星手机通过LocationManager API获取位置,如果GPS被禁用,我无法获取位置,通过网络提供商我无法获取位置 这是代码,这在HTC和索尼很有效,甚至可以禁用GPS,但在三星手机上却不行 public Location getLocation() { try { mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

我使用三星手机通过LocationManager API获取位置,如果GPS被禁用,我无法获取位置,通过网络提供商我无法获取位置

这是代码,这在HTC和索尼很有效,甚至可以禁用GPS,但在三星手机上却不行

public Location getLocation() {
        try {
            mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

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

            // getting network status
            isNetworkEnabled = mLocationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER); //fails in samsung phone returns NULL

            if (isGPSEnabled == false && isNetworkEnabled == false) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
                if (isNetworkEnabled) {
                    mLocationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    if (mLocationManager != null) {
                        mLocation = mLocationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    }
                }
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (mLocation == null) {
                        mLocationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        if (mLocationManager != null) {
                            mLocation = mLocationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        }
                    }
                }
            }

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

        return mLocation;
    }

这种行为是三星手机独有的。HTC你不会面对这个问题

您必须启动locationManager,因为默认情况下它会查看google地图缓存,而不关心当前位置信息的缓存有多陈旧。执行此操作时,启动应用程序,形成不同的gps位置,并注意它仍然显示旧位置。现在启动谷歌地图,重新启动你的应用程序,你的位置就会改变。要以编程方式启动“当前位置”的应用程序,请在调用
getLastKnownLocation

YOUR_APPLICATION_CONTEXT.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onLocationChanged(final Location location) {
    }
});

这种行为是三星手机独有的。HTC你不会面对这个问题

您必须启动locationManager,因为默认情况下它会查看google地图缓存,而不关心当前位置信息的缓存有多陈旧。执行此操作时,启动应用程序,形成不同的gps位置,并注意它仍然显示旧位置。现在启动谷歌地图,重新启动你的应用程序,你的位置就会改变。要以编程方式启动“当前位置”的应用程序,请在调用
getLastKnownLocation

YOUR_APPLICATION_CONTEXT.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
    @Override
    public void onLocationChanged(final Location location) {
    }
});

您的网络提供商是否已启用?您的网络提供商是否已启用?