我正在创建一个应用,我需要启动导航应用,然后使用结果(最重要的是驱动距离)。我正在使用startActivityForResult并使用方案“google.navigation”开始导航活动。像这样:
Intent i = new Intent(
Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=Somewhere"));
startActivityForResult(i,1);
这很好用,我在活动完成时收到回调,但活动的数据部分为空。
有办法做到这一点吗?
是否有导航历史记录,我可以浏览最新的数据行程?
最诚挚的问候 雅各布西蒙 - 加尔德
答案 0 :(得分:3)
有办法做到这一点吗?
不,你没有办法强制活动给你一个结果。确定活动是否支持结果取决于活动的作者,而不是活动的调用者。
是否有导航历史记录,我可以浏览最新的数据行程?
Google导航Android应用程序(包括google.navigation
计划)没有记录和支持的API。
答案 1 :(得分:2)
我不了解Google导航的回调。但是如果你只对获得驱动距离感兴趣,你可以继续在后台听取位置更新并自己计算距离。以下函数使用 android.location.Location
计算两个LatLang坐标之间的距离:
public double getGeodesicDistance(LatLng from, LatLng to){
Location _fromLoc = new Location("From location");
_fromLoc.setLatitude(from.latitude);
_fromLoc.setLongitude(from.longitude);
Location _toLoc = new Location("To location");
_toLoc.setLatitude(to.latitude);
_toLoc.setLongitude(to.longitude);
return Math.round(_fromLoc.distanceTo(_toLoc)); // distance in metres
}
但是如果你决定采用这种方法,你应该检测GPS数据的突然跳跃并相应地处理它们。
答案 2 :(得分:2)
您可以在开始导航之前获取该位置,并在导航关闭后再次获取该位置,并计算差异。