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