我希望能够在 Android 上确定用户是朝给定位置的方向行驶还是远离它。我正在从服务接收定期位置更新,并且想知道我该如何解决这个问题,因为我在考虑它时似乎正在绘制空白。我正在使用 fusedlocation 提供程序进行位置更新。
基本场景:
位置 L1,位置 L2 用户位置会定期更新 一旦用户在 L1 范围内,只通知用户一次 如果用户现在正朝着 L2 前进,那很好 如果不通知用户他们走错了方向
代码片段
在位置更改时广播带有新位置的意图
@Override
public void onLocationChanged(Location location) {
Intent i = new Intent();
i.setAction(NavigationAnimatorActivity.INTENT_ACTION);
i.putExtra(LocationClient.KEY_LOCATION_CHANGED, location);
Log.v(getClass().getSimpleName(),
i.getExtras().get(LocationClient.KEY_LOCATION_CHANGED)
.toString());
// Broadcast the intent carrying the data
sendBroadcast(i);
}
处理位置数据
class ReceiveLocationUpdate extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
// send message to activity
Bundle b = null;
// Check we have a bundle
if ((b = intent.getExtras()) != null) {
// Check if we have location data
if (action.equalsIgnoreCase(INTENT_ACTION)) {
Object o = b.get(LocationClient.KEY_LOCATION_CHANGED);
Log.v(getClass().getName(), o.toString());
if (o != null && o instanceof Location) {
mCurrentLocation = (Location) o;
checkIfAtLocation(mCurrentLocation);
}
}
}
}
}
检查我们是否在需要通知用户的位置附近
private void checkIfAtLocation(Location currLocation) {
Location L1 = s.asLocation();
Location L2; // Next waypoint
// Check if we're within range of a waypoint, notifying user if we are
if (mCurrentLocation.distanceTo(L1)) <= RADIUS) {
// Notify Once
// How do I check that user is travelling towards L2?
}
}
谢谢