Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测android设备是否支持google maps API_Android - Fatal编程技术网

如何检测android设备是否支持google maps API

如何检测android设备是否支持google maps API,android,Android,我目前正在开发一个使用谷歌地图API的android应用程序 我想知道是否所有android设备都支持MapAPI,因为这个API是可选的API,是平台的附加组件 我担心我的应用程序无法在该设备上运行 我需要知道的是,通过编程检测设备是否支持MapAPI,并捕获异常并执行其他操作 因为,使用地图功能只是我的应用程序的一个功能,我想让那些不支持地图api的设备仍然可以下载并运行我的应用程序,而不会影响我应用程序的其他功能 欢迎任何评论或建议据我所知,可选API仅适用于模拟器。API级别的两个不同版

我目前正在开发一个使用谷歌地图API的android应用程序

我想知道是否所有android设备都支持MapAPI,因为这个API是可选的API,是平台的附加组件

我担心我的应用程序无法在该设备上运行

我需要知道的是,通过编程检测设备是否支持MapAPI,并捕获异常并执行其他操作

因为,使用地图功能只是我的应用程序的一个功能,我想让那些不支持地图api的设备仍然可以下载并运行我的应用程序,而不会影响我应用程序的其他功能


欢迎任何评论或建议

据我所知,可选API仅适用于模拟器。API级别的两个不同版本仅适用于emulator,真正的设备都应该有maps API,我认为

你是对的,有些设备,如Archos 5IT和一些平板电脑没有谷歌地图、Android Market等

这是我的密码。 比利时地图是一种地图活动:

try {
    Intent i = new Intent(InfoGare.this, BelgianMap.class);
    startActivityForResult(i, 0);
}
catch(ActivityNotFoundException e) {
    Toast.makeText(context, "Google Map not found", Toast.LENGTH_LONG).show();
}

但是,在创建应用程序并显示消息时,可能还有其他方法可以找到它。这可能更好。

如果您在应用程序中使用谷歌地图,您应该在应用程序标记的manifest.xml中包含以下内容

 <uses-library android:name="com.google.android.maps" />


这将阻止用户安装您的应用程序或在市场上看到它,不确定是哪一个,可能两者都有。

感谢您的帮助!你所有的建议对我都很有用

我编写了一个简单的应用程序,可以部署在None-GoogleMapAPI仿真器上,并有问题地检测GoogleAPI的存在

我所做的是指定

(但android“required”属性只适用于2.1,不适用于1.6。我需要找出原因。因为当我查看文档时,它说该属性受1.6支持)

因此,我能够将应用程序部署到emulator上

其次,我创建了一个称为HelloMaps的映射活动 在我的主要活动中

try{
     mapActivity = new Intent(TestApp.this, HelloMaps.class); 
     startActivityForResult(mapActivity, 0); 
}catch(NoClassDefFoundError e){
(Toast.makeText(TestApp.this, "Google Map API not found", Toast.LENGTH_LONG)).show(); 
}
这将捕获异常并告诉我设备无法运行映射活动。

这对我来说很有效:

使用清单中的(未记录?)uses库android:name=“com.google.android.maps”android:required=“false”。这将允许在maps api不受支持的设备中安装

然后看看这个:


您仍然可以在应用程序中完整保存所有地图api代码(不需要2个版本),只需编写UI代码以防止运行它。(在我的例子中,我将偏好变灰)。如上所述,上述技术有效地预测了一些不起作用的事情,并允许您做出响应(无FCs),而不仅仅是对问题做出反应。

除了所描述的解决方案之外,我还使用了以下解决方案

<uses-library android:name="com.google.android.maps" android:required="false"/>

在尝试任何调用之前,我需要查看库是否存在,这样我就可以在调用之前填写相关的首选项。这是我要检查的代码

public static boolean hasSystemSharedLibraryInstalled(Context ctx,
        String libraryName) {
    boolean hasLibraryInstalled = false;
    if (!TextUtils.isEmpty(libraryName)) {
        String[] installedLibraries = ctx.getPackageManager()
                .getSystemSharedLibraryNames();
        if (installedLibraries != null) {
            for (String s : installedLibraries) {
                if (libraryName.equals(s)) {
                    hasLibraryInstalled = true;
                    break;
                }
            }
        }
    }
    return hasLibraryInstalled;
}

然后我检查是否安装了
com.google.android.maps

使用
adb
,打印所有系统库:

adb shell cmd package list libraries
如果您的设备支持谷歌地图,您将看到以下行:

library:com.google.android.maps

不例如,Archos5it(或其他一些平板电脑)没有谷歌地图(也没有Android Matket)。是的。有些平板电脑没有谷歌地图。我在一台真正的平板电脑设备上进行了测试,当我安装map activity时,它会显示安装失败的错误消息。Casio G'Zone命令没有预装Google Maps,它安装了B#$#%####ing Maps(我无法卸载它!)。并非所有设备都有Google Maps,例如Kindle Fire。这可以工作,并且具有良好的冗余性。然而,如果你只是不希望用户能够使用该应用程序,那么我发布的解决方案可能更合适,而且我认为如果你使用的是谷歌地图API,这是至关重要的。你是对的!非常感谢您提供的信息,这将对我有很大帮助!非常感谢。你的代码对我有用。但是我需要捕捉NoClassDefFoundError。我喜欢这个解决方案,因为它让我有机会打开一个带有谷歌地图(maps.google.com)url的网络视图。是的,你是对的。Android market将为用户过滤掉该应用程序。然而,我想允许用户不仅从市场上下载我的应用程序,而且从我的网站上下载。因为,使用地图功能只是我应用程序的功能之一,我想让那些不支持地图api的设备仍然能够下载并运行我的应用程序,而不会影响我应用程序的其他功能。android:required=“false”帮助我将地图应用程序安装到不支持谷歌api的模拟器(2.1)上,至少我没有收到“缺少共享库”的错误消息。然而,这个属性不适用于1.6,因为我无法编译,所以“编译项目时未找到“必需”错误消息的资源标识符要绕过编译错误,可以将目标版本提高到2.1,然后将minsdkversion设置为4。这将使它可以编译,但1.6及以下版本将忽略必需的=false(我认为)Yes!!如果我这样做,它允许我编译,但1.6仍然忽略required=false,并给出“Missing shared library”错误消息。请看我的另一篇文章,在三星galaxy tab和安卓3.2上,以及在virtualbox和安卓x86 2.2上,这似乎失败了。怎么会失败???不管这个类是否存在。。。如果类为null,则可以添加null检查,如果为null,则抛出异常。这根本不能失败,否则,Java将是一种非常蹩脚的语言也许他的意思是:“它没有检测到谷歌地图的存在,当它应该的时候,因为它是存在的”?@max4我曾经在三星Galaxy Tab 10.1和三星Galaxy Tab 2 7上测试过,两者都运行安卓4.0.3,上面的代码工作正常。我有一个用户报告
library:com.google.android.maps