当GPS(或定位服务)启动/停止时,通过广播接收器接收通知

3
我尝试使用一个监听PROVIDERS_CHANGED操作的BroadcastReceiver方法,但这只能告诉我位置设置何时打开/关闭。我想知道任何应用程序使用位置服务获取位置时的情况。我不需要知道是哪个应用程序在这样做,也不关心位置本身。我只想知道每当某个应用程序尝试获取位置时以及何时停止这样做。这可能吗?

我也很想知道这个。 - alandalusi
请查看此链接:http://stackoverflow.com/questions/11398732/how-do-i-receive-the-system-broadcast-when-gps-status-has-changed。告诉我它是否有帮助... @alandalusi 和 Xen - Lal
也可以查看这个链接 - Lal
@Lal 我之前看过它们,并且像我在问题中说的那样使用了 PROVIDERS_CHANGED。第一个例子使用了非官方的 android.location.GPS_ENABLED_CHANGE(而我需要监听位置服务,而不仅仅是 GPS),但这似乎并不适用于所有设备。对此的答案以及其他链接都使用 PROVIDERS_CHANGED,但这并没有告诉我何时打开/关闭位置服务。它告诉我用户何时启用/禁用位置服务设置。 - Omar Bahareth
现在只需要GPS就可以了,但我需要一个适用于任何地方的方法。 - Omar Bahareth
2个回答

6

我不确定你是否真的需要通过广播接收器得到通知,但如果绝对不需要,那么您可以使用GpsStatus.Listener

以下是使用方法:

mLocationManager.addGpsStatusListener(new GpsStatus.Listener(){

    @Override
    public void onGpsStatusChanged(int event) {
        if(event==GpsStatus.GPS_EVENT_STARTED){
            Log.d(TAG,"Gps Started");
        }else if(event==GpsStatus.GPS_EVENT_STOPPED){
            Log.d(TAG,"Gps Stopped");
        }
    }
});

如果您确实需要通过BroadcastReceiver接收此信息:只需将此代码包装在Service中,然后从那里发送事件即可。


我会测试以查看其是否可靠。我必须让它在后台运行并在必要时重新创建它。 - Omar Bahareth
工作得很好。我在某个地方读到,你必须在使用GpsStatus.Listener之前开始监听位置更新,但事实证明这并不是必要的。这实际上起作用了,并且我将其包装在一个粘性服务中,在启动时重新启动。谢谢@ben75。 - Omar Bahareth
这对我不起作用,我已经将它放在我的Fragment的onCreateView()中。 - Kaveesh Kanwal
很遗憾,GpsStatusListener现在已经被弃用了。 - Jesús Castro

4
不完全符合您的要求,但可能会有所帮助:您可以通过LocationManagerPASSIVE_PROVIDER注册获取位置更新。

当其他应用或服务请求位置更新时,此提供程序可被用于被动接收位置更新,而无需自己请求位置。

您将无法知道其他应用何时停止请求新位置,或者何时开始请求新位置,但您会知道它们接收到它们请求的某个位置。


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