【问题标题】:Receive a notification (via BroadcastReceiver) when GPS (or location services) is started/stopped在 GPS(或定位服务)启动/停止时接收通知(通过 BroadcastReceiver)
【发布时间】:2014-04-25 10:43:39
【问题描述】:

我尝试了一种方法,即使用侦听 PROVIDERS_CHANGED 操作的 BroadcastReceiver,但这只会告诉我何时打开/关闭位置设置。我想知道任何应用程序何时使用位置服务来获取位置。我不需要知道哪个应用程序正在执行它,我也不关心位置本身。我只想知道某个应用程序何时尝试获取位置,以及何时停止这样做。这可能吗?

【问题讨论】:

  • 我也很想知道这个
  • 看到这个link..告诉我它是否有帮助...... @alandalusi 和 Xen
  • 也检查一下link...
  • @Lal 我之前看过它们,我确实使用了 PROVIDERS_CHANGED,就像我在问题中所说的那样。第一个例子是使用非官方的 android.location.GPS_ENABLED_CHANGE (我一般需要监听位置服务,而不仅仅是 GPS),这似乎不适用于所有设备。它的答案以及其他链接都使用 PROVIDERS_CHANGED,这并没有告诉我何时打开/关闭位置服务。它告诉我用户何时启用/禁用位置服务设置。
  • 实际上现在只有 GPS 可以,但我需要一种适用于任何地方的方法。

标签: android location broadcastreceiver


【解决方案1】:

我不知道你是否真的需要通过广播接收器得到通知,但如果不是绝对需要,那么你可以使用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 中并从那里发送事件。

【讨论】:

  • 我会测试看看这是否可靠。我必须让它自己在后台运行,并在必要时重新创建它。
  • 工作正常。我在某处读到,您必须在使用 GpsStatus.Listener 之前开始监听位置更新,但事实证明并非如此。这确实有效,我将它包装在一个粘性服务中,该服务会在启动时重新启动。谢谢@ben75
  • 这对我不起作用,我已将其放入片段的 onCreateView()
  • 不幸的是,现在 GpsStatusListener 已被弃用。
【解决方案2】:

不完全是您所要求的,但可能会感兴趣:您可以从PASSIVE_PROVIDERLocationManager 注册位置更新。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2023-01-26
    • 2010-09-13
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多