监控GPS状态(如果用户使用通知栏关闭了GPS,则无法检查)

3

在我的应用程序中,我需要监控GPS状态。应用程序只能在GPS开启时运行,如果用户关闭了GPS,我会显示“位置和安全”设置。我已经实现了自定义GPS监控类:

public class GPSManager {
    LocationManager mLocationManager;
    StatusListener statusListener;


    /**
     * @param Context context - context to get LocationManager service
     * @param IGpsStatusClient client -component, which wants to receive GPS status update
     */
    public GPSManager(Context context, IGpsStatusClient client) {
        mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        statusListener=new StatusListener(client);
    }

    public boolean isGpsEnabled(){
        return mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }

    public void registerUpdates() {
        mLocationManager.addGpsStatusListener(statusListener);
    }

    public void unregisterUpdates() {
       mLocationManager.removeGpsStatusListener(statusListener);
    }

    class StatusListener implements GpsStatus.Listener {

        IGpsStatusClient client;

        public StatusListener(IGpsStatusClient client){
            this.client=client;
        }

        public void onGpsStatusChanged(int event) {
            if(event==GpsStatus.GPS_EVENT_STOPPED){
                client.promptGpsSettings();
            }
        }
    }

}

这里的客户端是一个Fragment类实例。它实现了IGpsStatusClient接口,其中有一个方法(我会在其中显示位置设置)。 我在onResume()注册更新,在onPause()注销。 但是这没有效果。当我展开通知栏并关闭GPS,然后返回应用程序时,没有提示显示。据我所知,GPS状态通知不像“挂起意图”,可以挂起一段时间,以便所有接收器都可以处理它。 有哪些选择? 据我所知,只有用户可以关闭GPS,而我的Activity可见时不能关闭。 因此,我只应该在Activity(或Fragment)生命周期事件中检查GPS状态。但是当通知栏展开时,我不会收到onResume()或onPause()调用(但为什么我不接收GPS状态通知呢?) 我正在考虑使用Service,但认为对于我的问题来说这个解决方案太昂贵了。 需要帮助吗? 谢谢。

1个回答

4

你是否尝试过实现LocationListener并使用onProviderDisabled/onProviderEnabled方法?

这里是关于LocationListener的安卓开发者页面链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接