2014-11-22 133 views
3

我正在创建一个应用程序,我需要启动导航应用程序,然后使用结果(最重要的是驱动距离)。我使用startActivityForResult并使用方案“google.navigation”开始导航活动。像这样:启动Android导航以获得结果

Intent i = new Intent(
    Intent.ACTION_VIEW, 
    Uri.parse("google.navigation:q=Somewhere")); 
startActivityForResult(i,1); 

这很好,我在活动完成时得到一个回调,但活动的数据部分是空的。

有没有办法做到这一点?

是否有导航历史,我可以浏览最新的数据旅程?

问候 雅各布·西蒙Gaarde

回答

2

我不知道从谷歌导航回调。但是,如果您只想获得驾驶距离,则可以继续收听后台中的位置更新并自行计算距离。下面的函数使用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数据的突然跳跃,并相应地处理它们。

+0

这是最注重结果的答案。我会进一步调查! – 2014-12-02 00:58:16

3

有没有办法做到这一点?

不,你没有办法迫使一个活动给你一个结果。活动是否支持结果的决定在于活动的作者,而不是活动的主叫者。

是否有导航历史,我可以浏览最新的数据旅程?

Google导航Android应用程序(包括google.navigation方案)没有记录和支持的API。

+0

我知道我不能强迫一个活动的答案。我错过了谷歌有关内置计划活动的文档。 – 2014-12-02 00:55:26

2

您可以在开始导航之前获取位置,然后在导航关闭后再次获取位置并计算差异。

+0

这不会给我实际的驾驶里程数,而是基于距离计算的估算值。 – 2014-12-02 00:57:08