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级别,都带有导航?
答案 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页面上打开Google Play。