我通过使用侦听PROVIDERS_CHANGED操作的BroadcastReceiver尝试了一种方法,但这只会告诉我何时打开/关闭位置设置。我想知道什么时候使用位置服务来获取任何应用程序的位置。我不需要知道哪个应用程序正在执行它,我不关心位置本身。我只想知道某个应用程序试图获取某个位置,以及何时停止这样做。这可能吗?
答案 0 :(得分: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接收此信息:只需将此代码包装在服务中并从那里发送事件。
答案 1 :(得分:4)
不完全是您所要求但可能感兴趣的内容:您可以从PASSIVE_PROVIDER
到LocationManager
注册位置更新。
当其他应用程序或服务请求时,此提供程序可用于被动地接收位置更新,而无需自己实际请求这些位置。
您无法知道其他应用何时停止申请新位置,或者何时开始申请新位置,但您知道他们什么时候收到他们要求的位置。