启动Android导航以获得结果

时间:2014-11-22 15:45:34

标签: android android-intent navigation

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

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

这很好用,我在活动完成时收到回调,但活动的数据部分为空。

有办法做到这一点吗?

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

最诚挚的问候 雅各布西蒙 - 加尔德

3 个答案:

答案 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)

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