找不到处理意图的活动 {act=android.intent.action.VIEW dat=google.navigation:q=17.399986,78.483137 pkg=com.google.android.apps.maps}。

5

我正在尝试使用以下代码启动地图。

public static void navigate(Context context, double lat, double lon) {
        String locationQuery = lat + "," + lon;
        Uri gmmIntentUri = Uri.parse("google.navigation:q=" + locationQuery);
        Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
        mapIntent.setPackage("com.google.android.apps.maps");
        context.startActivity(mapIntent);
    }

但是在某些情况下,我会得到“未找到处理意图崩溃”的错误。我在这里做错了什么。


你说在某些情况下,是指不同的设备还是不同的经纬度值? - Zun
这是随机的。无法确定它是针对特定的纬度经度还是设备。它来自不同的设备。 - user1002448
您正在强制使用com.google.android.apps.maps包,可能是因为用户没有安装此应用程序,或者您生成的链接已损坏,无法被Google地图(或设备上的任何其他应用程序)理解。 - Zun
那么如果没有安装地图,我们该如何处理这个意图呢? - user1002448
你不能通过用户的网络浏览器打开地图吗? - Zun
1个回答

7

我认为你应该像这样检查是否安装了这个软件包。

private boolean isPackageInstalled(String packagename, PackageManager packageManager) {
    try {
        packageManager.getPackageInfo(packagename, 0);
        return true;
    } catch (NameNotFoundException e) {
        return false;
    }
}

如果不是这样,请打开Web版本。或查看Google Maps文档。据我所知,Maps有一种处理方法。

或者您可以通过以下方式检查应用程序是否可用:

if (mapIntent.resolveActivity(getPackageManager()) != null) {
    ...
}

如果应用程序未安装,您可以执行以下操作:
1.将用户重定向到Google Play。
2.在浏览器中打开地图。
String uri = "http://maps.google.com/maps?saddr=" + sourceLatitude + "," + sourceLongitude + "&daddr=" + destinationLatitude + "," + destinationLongitude;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接