【问题标题】:Start Android navigation for result启动 Android 导航以获取结果
【发布时间】:2014-11-22 15:45:34
【问题描述】:

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

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

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

有没有办法做到这一点?

是否有导航历史可供我浏览最新行程以获取数据?

最好的问候 雅各布·西蒙-加德

【问题讨论】:

    标签: android android-intent navigation


    【解决方案1】:

    有没有办法做到这一点?

    不,你没有办法强迫一个活动给你一个结果。活动是否支持某个结果的决定权在于活动的作者,而不是活动的调用者。

    是否有导航历史可供我浏览最新行程以获取数据?

    对于 Google Navigation Android 应用(包括 google.navigation 方案)没有记录和支持的 API。

    【讨论】:

    • 我知道我不能强制从活动中得到答案。我想念谷歌关于内置方案活动的文档。
    【解决方案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 数据的突然跳跃并进行相应处理。

    【讨论】:

    • 这是最注重结果的答案。我会进一步调查!
    【解决方案3】:

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

    【讨论】:

    • 这并没有给我实际的行驶里程,而是基于距离计算的估计。
    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多