Google 地图 Android API V2 检查 Google 地图应用是否被禁用

Google Maps Android API V2 Check if Google Maps app is disabled

这个 question 讨论检查设备上是否安装了 Google 地图,答案是否正常。在较新版本的 Android 中,我们只能禁用 Google 地图应用程序而不能将其卸载,因此上述答案对我来说并不完全有效。

当我在安装了 Google Play 服务 9.2.x 的 phone 中测试我的应用程序时,当 Google 地图应用程序被禁用时,它不起作用很奇怪,因为在 Google 播放服务 >= 9.4.x.

的设备中它可以正常工作

有没有办法检查 Google 地图应用程序是否被禁用? (请注意,应用程序仍在安装,只是已禁用。)

您可以使用包名来检查,如下所示

String packageName = "com.google.android.gms.maps";
int flag = 0;
ApplicationInfo appInfo = getActivity().getPackageManager().getApplicationInfo(packageName,flag);
boolean isAppDisabled = appInfo.enabled;

阅读here了解更多详情。您还可以根据您的要求设置不同的标志常量,如文档 link 中所述。

试试这个,例如,要显示旧金山的地图,您可以使用以下代码:

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");

现在是重要的部分:

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

如您所见,如果不是 null 则 activity 开始。当然,您可以在 ELSE 语句中包含一条消息,供用户告知 Google 地图未安装在 his/her 设备上。

连接@GauravSarma 的non-working 解决方案和来自@CristianBabarusi 的字符串我也得到了non-working 解决方案。它 returns 在没有 Google Play 服务的 API 19 模拟器上是正确的。

private fun isMapsAvailable() : Boolean {
    val packageName = "com.google.android.apps.maps"
    val flag = 0
    return try {
        val appInfo = activity?.packageManager?.getApplicationInfo(packageName, flag)
        appInfo?.enabled == true
    } catch (e: PackageManager.NameNotFoundException) {
        false
    }
}