禁用GPS

时间:2015-09-21 16:56:04

标签: android gps location locationlistener

更新的问题 - 仍然没有工作

我已经更改了代码。

现在,deactivateAlerts和activateAlerts位于MainActivity中。

现在,在activateAlerts()中,我实例化了GPS提供商的GPSListener:

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    gpsListener = new GPSListener(getApplicationContext());
} else if

GPSListener就是这样:

public class GPSListener implements LocationListener {

private Context mCtx;
private Location cLoc;
private LocationManager mLocMan;

public GPSListener (Context ctx){
    mCtx = ctx;
    mLocMan = (LocationManager) mCtx.getSystemService(Context.LOCATION_SERVICE);
    mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

public Location getLocation()
{
    cLoc = mLocMan.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    return cLoc;
}

public void stop()
{
    mLocMan.removeUpdates(GPSListener.this);
}

@Override
public void onLocationChanged(Location location) {
    Log.i("UPDATING", "updating location");
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

}

使用deactiveAlerts()函数,我执行删除GPS更新的指令:

if(gpsListener!=null){
   gpsListener.stop();
}

但是GPS尚未停止=(

现在有什么问题?

原始问题

用户可以激活或停用位置更新。

如果位置更新已激活,则可以正常工作,但是当停用位置更新时,GPS仍在等待更新(并且操作栏上会显示图标)。

代码是:

public class Alerts extends Fragment {

MyLocationListener myLocationListener = null;

...

public void activateAlerts() {

    locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
    myLocationListener = new MyLocationListener();

    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {

            if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        Utils.MINIMUM_TIME_BETWEEN_UPDATE,
                        Utils.MINIMUM_DISTANCECHANGE_FOR_UPDATE,
                        myLocationListener
                );
            } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        Utils.MINIMUM_TIME_BETWEEN_UPDATE,
                        Utils.MINIMUM_DISTANCECHANGE_FOR_UPDATE,
                        myLocationListener
                );
            } else {
                locationManager.requestLocationUpdates(
                        LocationManager.PASSIVE_PROVIDER,
                        Utils.MINIMUM_TIME_BETWEEN_UPDATE,
                        Utils.MINIMUM_DISTANCECHANGE_FOR_UPDATE,
                        myLocationListener
                );
            }
        }
    });

    ...

}

public void deactivateAlerts() {

    ...

    locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
    if(myLocationListener != null) {
        locationManager.removeUpdates(myLocationListener);
        myLocationListener = null;
    }

    ...
}

public class MyLocationListener implements android.location.LocationListener {
    public void onLocationChanged(Location location) {
        Log.i("UPDATING", "updating location");
    }

    public void onStatusChanged(String s, int i, Bundle b) {
        Log.v("LocationListener", "onStatusChanged");
    }

    public void onProviderDisabled(String s) {
        Log.v("LocationListener", "onProviderDisabled");
    }

    public void onProviderEnabled(String s) {
        Log.v("LocationListener", "onProviderEnabled");
    }
}

有什么问题?

我已阅读此帖:

Post1

Post2

Post3

Post4

1 个答案:

答案 0 :(得分:0)

修改

这可能是你的错误;在下面的代码中,您可以看到我只检索location == null的{​​{1}}您需要仔细查看getLocation()函数的已发布代码,这类似于activateAlerts()函数。您需要实现我拥有的所有功能,包括 Location 成员。

if (isGPSEnabled) {
    if (location == null) {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_UPDATE,MIN_DISTANCE, 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();
                Geocoder geocoder = new Geocoder(this,Locale.getDefault());
                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

                if (addresses != null)
                    setProvState(addresses.get(0).getAdminArea());
            }
        }
    }
} 

下面的整个getLocation()方法:

// returns the location as longitude and latitude
public void 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);

        // First get location from Network Provider
        if (isNetworkEnabled) {
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, MIN_UPDATE,
                    MIN_DISTANCE, this);
            Log.d("Network", "Network");
            if (locationManager != null) {
                location = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                    Geocoder geocoder = new Geocoder(this,
                            Locale.getDefault());
                    List<Address> addresses = geocoder.getFromLocation(
                            latitude, longitude, 1);

                    if (addresses != null)
                        setProvState(addresses.get(0).getAdminArea());
                }
            }
        }
        // if GPS Enabled get lat/long using GPS Services
        if (isGPSEnabled) {
            if (location == null) {
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, MIN_UPDATE,
                        MIN_DISTANCE, 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();
                        Geocoder geocoder = new Geocoder(this,
                                Locale.getDefault());
                        List<Address> addresses = geocoder.getFromLocation(
                                latitude, longitude, 1);

                        if (addresses != null)
                            setProvState(addresses.get(0).getAdminArea());
                    }
                }
            }
        }

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