谷歌地图Android API V2 如何检测谷歌地图应用是否被禁用

4
这篇问题讨论了如何检查设备上是否安装有谷歌地图并给出了可行的答案。在较新版本的Android中,我们只能禁用Google Maps应用程序而不能卸载它,因此上述答案对我来说并不完全适用。
当我在已安装Google Play服务9.2.x的手机上测试我的应用程序时,当Google Maps应用程序被禁用时,它无法正常工作,这是很奇怪的,因为在安装有Google Play服务>= 9.4.x的设备中,即使没有Google Maps应用程序也可以正常工作。
有没有一种方法可以检查Google Maps应用程序是否被禁用?(请注意,应用程序仍然已安装但被禁用。)
3个回答

7
您可以按照以下方式使用软件包名称进行检查。
String packageName = "com.google.android.gms.maps";
int flag = 0;
ApplicationInfo appInfo = getActivity().getPackageManager().getApplicationInfo(packageName,flag);
boolean isAppDisabled = appInfo.enabled;

点击这里了解更多细节。你也可以根据文档链接中描述的要求设置不同的标志常量。


@RioMarieA.Callos请接受这个答案。 - Gaurav Sarma
谢谢。很高兴我能帮到你。 - Gaurav Sarma
@GauravSarma 大感谢!我只是不得不将包更改为 com.google.android.apps.maps,因为使用 ...gms.maps 会抛出错误。 - Jocky Doe
1
@JockyDoe 很高兴我能帮到你 :) - Gaurav Sarma

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

尝试这个:

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);
}

如您所见,如果不为空,则启动该活动。当然,您可以包含一个ELSE语句,并向用户发布一条消息,告知他/她的设备上未安装Google Maps。


0

结合@GauravSarma的不起作用的解决方案和@CristianBabarusi的字符串,我也得到了一个不起作用的解决方案。在没有Google Play服务的API 19模拟器上返回true。

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
    }
}

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