【问题标题】:Intent to start a navigation activity意图启动导航活动
【发布时间】:2011-08-13 16:29:56
【问题描述】:

在我的应用程序中,我可以选择开始导航到选定的 POI。基本上我想要的是从我的应用程序中启动一个转弯导航器。问题是我不知道安装了哪个(如果有的话)导航器。

所以,问题是如何通过首先向用户显示适合导航的活动列表来启动意图,让他选择他想使用的活动?也很高兴找到一种将额外参数传递给选定活动的方法(这对我来说听起来像是一个问题,因为不同的导航应用程序使用不同的名称来表示它们的额外参数,我猜)。

如果不清楚:我正在寻找一种方法来显示适用于导航的应用程序列表,并选择默认设置。

编辑:在这里找到实现http://datamoil.blogspot.com/2011/04/android-universal-intent-to-start.html

【问题讨论】:

    标签: android navigation android-intent


    【解决方案1】:

    坏消息是,没有用于导航的标准 Intent URI。

    是的,存在 google.navigation URI,应用可以选择支持它。

    我能想到的最佳解决方案是:

    • 明确检查已知应用
    • 隐式检查挂钩 google.navigation: 和 也许 geo: 的应用程序:(但你也会获得地图应用程序)

    您可以使用PackageManage.queryIntentActivities 枚举可能的隐式目标

    【讨论】:

    • 不幸的是,你是对的。我听从了你的建议并实施了。这不是最优雅的解决方案,但它可以工作并且几乎符合我的预期。
    【解决方案2】:

    试试:

    Intent intent = new Intent(Intent.ACTION_VIEW, 
        Uri.parse("google.navigation:q=New+York+NY")); 
    startActivity(intent);
    

    【讨论】:

    • 感谢您的努力,这不是我想要的。 Google Navigation 仅适用于美国,它不一定是首选的导航应用程序。我想我的问题很清楚,我正在寻找一种方法来显示适合导航的应用程序列表。
    • 这完全取决于导航应用使用的意图过滤器。 AFAIK 没有针对导航意图的特定类别。我手机上的导航应用程序捕捉到了我刚刚发布的意图。所以当我调用它时,我会得到一个不同应用程序的列表,而不仅仅是谷歌导航。
    • 每个智能导航应用都应注册此意图,因为当您选择地址并单击导航到时,它会调用地图。
    • 显然不是每个。例如。 Navigon 有这样做的公开意图。 navigon.com/portal/common/faq/files/online_documents/…
    【解决方案3】:

    首先我在按钮侦听器内的onTap 方法中使用:

    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=New+York+NY")); 
    mContext.startActivity(i);
    

    然后在清单中简单地使用:

    <activity android:name=".LaunchGPS" android:screenOrientation="portrait">
      <intent-filter>       
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </activity>
    

    这将打开您手机上的任何 Navigator 应用程序,例如 VZ Navigagtor、Google 或任何手机加载的应用程序。第一次完美地为我工作。希望这能解决您的问题。

    【讨论】:

    • 您上面的答案也是如此。它对我不起作用。阅读 cmets 到 androidika 的答案。
    【解决方案4】:

    我发现使用此代码有更多优势(仅用于显示可用的导航器应用程序)

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:"));
    if (intent.resolveActivity(getActivity().getPackageManager()) != null)   {
        startActivityForResult(Intent.createChooser(intent, "Continues with:", CHOOSE_NAVIGATOR_ID);
    } else {
       // Handle failure...
    }
    

    【讨论】:

    • 你能解释一下代码吗?我对 Java 一无所知。
    • 我正在使用意图对象来“过滤”手机中当前安装的可以解释此类方案的应用程序(通常是地图或导航器应用程序)。此操作被委派给实际检查是否有至少一个应用程序可以解释此 URI 的 resolveActivity 方法。如果它存在,将创建一个“选择器”,即具有各种兼容应用程序图标的特定可点击列表,在触摸其中一个图标时,它将使用先前在 URI 中定义的参数发送到其应用程序。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多