如何实现 GPS 状态变化监听器

dro*_*dev 6 gps android location

在我的应用程序中,我每 5 分钟向服务器发送一次位置更新。为此,我正在使用 gms LocationListener。这工作正常。我在服务中运行它。如果用户关闭 GPS,它将无法工作。因为即使在打开 GPS 后它也在运行它,它将等待完成 5 分钟的更新时间。所以我想要的是当用户打开 GPS 时,它应该触发 onLocationUpdate 侦听器。

为此,我做了如下操作,我已经GpsStatus.Listener在我的服务中进行了初始化,并实现了它的onStatusChange()功能,但是在我将 GPS 状态从打开更改为关闭/关闭后,该功能没有触发。

代码

public class LocationUpdateService extends Service implements GpsStatus.Listener, com.google.android.gms.location.LocationListener{
    onCreate(Bundle b){
        super.onCreate();
        registerGpsStatusListener();
    }

    private void registerGpsStatusListener() {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.addGpsStatusListener(this);
    }

    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
            case GpsStatus.GPS_EVENT_STARTED:
                Log.e(TAG, "onGpsStatusChanged started");
                break;

            case GpsStatus.GPS_EVENT_STOPPED:
                Log.e(TAG, "onGpsStatusChanged stopped");
                break;

            case GpsStatus.GPS_EVENT_FIRST_FIX:
                Log.e(TAG, "onGpsStatusChanged first fix");
                break;

            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                Log.e(TAG, "onGpsStatusChanged status");
                break;
        }
    }

    @Override
    public void onLocationChanged(Location location) {
       //opertations
    }
}
Run Code Online (Sandbox Code Playgroud)

我的查询是:

1- 为什么onGpsStatusChanged()在更改 GPS 状态后该方法没有调用。

2-如何在onLocationChanged()方法中获取位置,以便我可以调用onLocationUpdate()方法。

注意:请不要推荐使用,BroadcastReceiver因为它需要对我当前的代码进行大量的代码修改。

var*_*nkr 3

我想你是想知道用户何时从他的设备上打开或关闭 GPS。在这种情况下,你可以看看这个答案。这是检测 GPS 开关的唯一正确且可靠的方法(至少它是唯一对我有用的方法)。