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

Posted

技术标签:

【中文标题】监控 GPS 状态(如果用户使用通知栏关闭 GPS,则无法检查)【英文标题】:Monitor GPS status(can't check it if user turns GPS off using Notification Bar) 【发布时间】:2011-12-10 02:37:37 【问题描述】:

在我的应用中,我需要监控 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();
            
        
    


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

【问题讨论】:

【参考方案1】:

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

Here是关于LocationListenerandroid开发者页面的链接

【讨论】:

以上是关于监控 GPS 状态(如果用户使用通知栏关闭 GPS,则无法检查)的主要内容,如果未能解决你的问题,请参考以下文章

phonegap 中的 GPS 状态

GPS 状态接收器在 2 周前停止工作

如何创建不断检查GPS状态的后台服务?

Android 在设备处于睡眠状态时获取 GPS 坐标更新(屏幕已关闭)

如何在Android中使用GPS服务

监听 GPS 状态变化