我正在与被动提供商合作,使用此代码。
Intent intent = new Intent(PASSIVE_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, pi);
我在AndroidManifest.xml中定义广播接收器
<receiver
android:name="passiveLocationReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="com.passive_location_update" />
</intent-filter>
</receiver>
passiveLocationReceiver是
public class passiveLocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (!PASSIVE_ACTION.equals(action))
return;
Log.d("chitacan","Passive Provider Event!!!");
}
}
此代码适用于其他地理位置应用程序(Facebook,foursquare等) 但是对于“Google Map”应用程序,它没有。(d.android.com解释了“PASSIVE_PROVIDER”,可以在其他应用程序请求位置时更新。)
即使我可以通过“Google Map”应用程序查看我的位置,但我无法从被动提供程序获取任何事件。(我看不到passiveLocationReceiver的日志消息。)
好吧,我试图在命令行中转储LocationManager的状态,
$adb shell dumpsys location
然而,LocationManager的状态并没有改变任何东西。看起来像“谷歌地图”应用程序 不使用LocationManager。
当“Google Map”应用程序更新我的位置时,有没有办法获得被动事件? 或者我做错了什么?
答案 0 :(得分:2)
最近的Google地图和其他地图服务使用基于Google Play服务的新版位置API。他们不仅仅依赖GPS或网络提供商,而且他们使用“融合”的。因此,传统的PASSIVE_PROVIDER无法使用“融合”方法捕获位置更新。
您最好将新的API与LocationClient和LocationRequest一起使用PRIORITY_NO_POWER。检查以下代码
LocationRequest lRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_NO_POWER)
.setInterval(mMIN_LOCATION_UPDATE_INTERVERAL_IN_MILLISECONDS);
Intent locationIntent = new Intent(mPASSIVE_LOCATION_INTENT_ACTION_STRING);
mPassiveLocationPendingIntent = PendingIntent.getBroadcast(mContext, 0, locationIntent ,PendingIntent.FLAG_UPDATE_CURRENT);
mPassiveLocationClient.requestLocationUpdates(lRequest, mPassiveLocationPendingIntent);
答案 1 :(得分:0)
requestLocationUpdates仅接收位置值的更改或“更新”。 Google地图将广播GPS位置提供商提供的位置值更改。
如果从模拟器进行测试,请尝试为模拟位置输入新值。否则,边走边试试。
但是,我也注意到Wi-Fi(网络)位置的变化不是来自谷歌地图,就像来自其他类似的应用程序一样。
在你的情况下 - 也许GPS未启用,或者它没有从当前状态改变位置,因此你没有收到该听众的位置任何“更新”。 (我发现这个主题是因为我想知道为什么谷歌地图没有广播Wi-Fi位置变化,如果有人想出来的话)