谷歌地图和导航

时间:2014-02-07 15:40:50

标签: android google-maps

Google地图和Google导航是否是相同的套餐?

我想在启动此意图之前检查是否已安装Google导航

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
Uri.parse("google.navigation:ll="+toPosition.latitude+","+ toPosition.longitude));
startActivity(intent);

我使用此方法检查是否已安装

public boolean isGoogleNavInstalled()
    {
        try
        {
            ApplicationInfo info =  getActivity().getPackageManager().getApplicationInfo("google.navigation", 0 );
            return true;
        } 
        catch(PackageManager.NameNotFoundException e)
        {
            return false;
        }
    }

但这总是返回FALSE。谷歌导航包的确切名称是什么?如果它与谷歌地图相同,那么可以假设任何版本的谷歌地图,关于设备和API级别,都带有导航?

2 个答案:

答案 0 :(得分:2)

  

Google地图和Google导航是否是相同的套餐?

  

我想在启动此意图之前检查是否已安装Google导航

与用户更相关的是查看Intent是否解析为任何内容,例如resolveActivity()上的PackageManager。如果用户希望使用其他应用来处理该请求,那就是用户的特权。

  

但这总是返回FALSE

那是因为您传递的是设备上不存在的包名称。

  

谷歌导航包的确切名称是什么?

Google导航不作为独立包存在。它是Google地图的一部分。

  

如果它与谷歌地图相同,那么可以假设任何版本的谷歌地图,关于设备和API级别,都附带导航?

我当然不会认为,由于当地法律,上游数据提供商的许可条款等,导航部分可能存在分布限制。

这就是为什么用户可以使用Intent上的queryIntentActivities()resolveActivity()来解析您所需的PackageManager是否解决了某些问题。因为可能想要使用Google导航并不意味着所有人想要使用Google导航。

请注意,您的Intent无论如何都依赖于无证件Uri结构,因此无法保证即使Google地图也会尊重它。

答案 1 :(得分:2)

    Intent intent = new Intent(Intent.ACTION_VIEW,
    Uri.parse("google.navigation:q=" + point.getLat() + "," + point.getLon()));
    if(!canHandleIntent(mActivity, intent)) {
         intent = new Intent(Intent.ACTION_VIEW);
         intent.setData(Uri.parse("market://detailsid=com.google.android.apps.maps"));
    }
    startActivity(intent);

public boolean canHandleIntent(Context context, Intent intent){
     PackageManager packageManager = context.getPackageManager();
     List activities = packageManager.queryIntentActivities(
                intent, PackageManager.MATCH_DEFAULT_ONLY);
        return !(activities == null || activities.size() == 0);
}

如果Intent解析为与Intent合适的应用程序,则在Google Maps页面上打开Goog​​le Play。