我尝试使用一个监听PROVIDERS_CHANGED操作的BroadcastReceiver方法,但这只能告诉我位置设置何时打开/关闭。我想知道任何应用程序使用位置服务获取位置时的情况。我不需要知道是哪个应用程序在这样做,也不关心位置本身。我只想知道每当某个应用程序尝试获取位置时以及何时停止这样做。这可能吗?
我不确定你是否真的需要通过广播接收器得到通知,但如果绝对不需要,那么您可以使用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中,然后从那里发送事件即可。
LocationManager
从PASSIVE_PROVIDER
注册获取位置更新。
当其他应用或服务请求位置更新时,此提供程序可被用于被动接收位置更新,而无需自己请求位置。
您将无法知道其他应用何时停止请求新位置,或者何时开始请求新位置,但您会知道它们接收到它们请求的某个位置。