检查是不是有默认应用程序的选择器意图

Posted

技术标签:

【中文标题】检查是不是有默认应用程序的选择器意图【英文标题】:Chooser Intent that checks if there is a default app检查是否有默认应用程序的选择器意图 【发布时间】:2019-01-07 18:58:05 【问题描述】:

由于WazeGoogle Maps 有不同的URI formats,我需要创建两个单独的意图以确保应用将用户导航到正确的位置。

主要问题:我不想让用户每次都选择导航应用。我希望它的行为如下:如果用户设置了默认导航应用程序 - 无需询问即可使用它。

如何为不同的应用提供两个 URI,但仍具有相同的界面,就像使用 ACTION_VIEW 参数启动 Intent 时一样?

这是我正在使用的代码。目前导航工作正常,但每次都要求用户选择导航应用:

if (!StringUtils.isEmpty(address)) 
    String q = address + "&mode=d&navigate=yes&geo=" + address + "&ll=" + address;
    String urlWaze = "https://waze.com/ul?q=" + q;
    Intent wazeIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlWaze));

    String urlGoogle = "google.navigation:q=" + q;
    Intent googleMapsIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlGoogle));
    googleMapsIntent.setPackage("com.google.android.apps.maps");

    String title = getActivity().getResources().getString(R.string.choose_navigation_app);
    Intent chooserIntent = Intent.createChooser(wazeIntent, title);
    Intent[] arr = new Intent[1];
    arr[0] = googleMapsIntent;
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr);

    getContext().startActivity(chooserIntent);
 else 
    Toast.makeText(getContext(), getString(R.string.waypoint_not_have_geolocation), Toast.LENGTH_SHORT).show();

【问题讨论】:

看看thiskeyser的回答。 @AndriiOmelchenko 谢谢,但这不是一个选项,因为我正在处理不同的 URI 以实现不同的意图。 但是您可以确定默认应用程序并使用 Intent 和适当的 URI。 @AndriiOmelchenko 作为键控器提到 - 输出“可疑”并且不可靠。 伤心,但至少您可以使用“默认使用”复选框创建自定义应用选择器(如this 或that)并仅在第一次询问用户... this. 【参考方案1】:

事实证明,Waze 和 Google 地图的 URI 非常不同,为了解决我在问题中描述的情况,唯一的解决方案是在我的应用程序中创建单独的用户设置。

【讨论】:

以上是关于检查是不是有默认应用程序的选择器意图的主要内容,如果未能解决你的问题,请参考以下文章

当用户取消意图选择器时是不是有事件?

检查是不是有应用程序在监听我的意图

在不显示选择器的情况下启动 Native Camera

android意图选择器出现缓慢

通过意图打开邮件应用程序不会打开选择器

检查意图 uri 是不是可用