意图启动导航活动

Posted

技术标签:

【中文标题】意图启动导航活动【英文标题】: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

【问题讨论】:

【参考方案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 中定义的参数发送到其应用程序。跨度>

以上是关于意图启动导航活动的主要内容,如果未能解决你的问题,请参考以下文章

Espresso 可以在没有意图启动活动的情况下工作吗?

帮助文件中意图和活动导航的 AtomicReferences

如何在导航抽屉中添加活动

如何从活动意图到特定片段

导航架构组件 - 将参数数据传递给startDestination

启动新意图后活动加载缓慢