如何检测Android设备是否支持谷歌地图API

时间:2010-08-04 22:47:44

标签: android

我目前正在开发一个使用Google地图API的Android应用程序。

我想知道所有的Android设备都支持map API,因为这个api是一个opti api,它是平台的附加组件。

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

我需要知道的是以编程方式检测设备支持映射API,并捕获异常并执行其他操作。

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

欢迎提出任何意见或建议

8 个答案:

答案 0 :(得分:15)

除了描述

之外,我还使用了以下解决方案
<uses-library android:name="com.google.android.maps" android:required="false"/>

在另一个答案中:

public void mapClick(View view)
{
    try
    {
        // check if Google Maps is supported on given device
        Class.forName("com.google.android.maps.MapActivity");

        this.startActivity(new Intent(this, MyMapActivity.class));
    }
    catch (Exception e)
    {
        e.printStackTrace();
        UIUtils.showAlert(this, R.string.google_maps_not_found);
    }
}

答案 1 :(得分:5)

我需要在尝试任何调用之前查看该库是否存在,因此我可以事先填写相关的首选项。这是我提出要检查的代码。

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

答案 2 :(得分:2)

你是对的,有些设备,比如Archos 5IT和Some Tablet没有谷歌地图,Android Market等......

这是我的代码。 BelgianMap是MapActivity:

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

但也许还有另一种方法可以在创建应用程序时找到它并显示消息。那可能会更好。

答案 3 :(得分:2)

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

我编写了一个简单的应用程序,可以部署在None-Google-Map API模拟器上,并检测到有问题的Google API存在。

我做的是指定<uses-library android:name="com.google.android.maps" android:required="false" />

(但是android“required”属性仅适用于2.1并且不适用于1.6。我需要找出原因。当我查看文档时,它表示这个归属于1.6)

因此,我可以将应用程序部署到模拟器上。

其次,我创建了一个名为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(); 
}

这将捕获异常并告诉我该设备无法运行地图活动。

答案 4 :(得分:1)

这对我有用:

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

然后检查出来: http://android-developers.blogspot.com.ar/2009/01/can-i-use-this-intent.html

你仍然可以在应用程序中保存所有的map-api代码(不需要2个版本),只需对你的UI进行编码以防止它运行。 (在我的情况下,我灰暗了一个偏好)。如上所述,上面概述的技术有效地预测了一些不起作用的东西,并且允许您响应(没有FC),而不仅仅是对问题作出反应。

答案 5 :(得分:0)

据我所知,可选API仅适用于模拟器。 2个不同版本的API级别仅适用于模拟器,实际设备应该都具有我认为的地图API

答案 6 :(得分:0)

如果您在应用程序中使用googlemaps,则应在应用程序标记内的manifest.xml中包含以下内容

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

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

答案 7 :(得分:0)

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

adb shell cmd package list libraries

如果您的设备支持Google地图,您会看到以下这一行:

library:com.google.android.maps