我目前正在开发一款使用Google地图API的安卓应用。
我想知道所有安卓设备是否都支持地图API,因为这个API是一个可选API并且是平台的附加组件。
我担心我的应用程序无法在某些设备上运行。
我需要知道的是如何以编程方式检测设备是否支持地图API,并捕获异常并执行其他操作。
因为使用地图功能只是我的应用程序的其中一个功能,所以我希望那些不支持地图API的设备仍然能够下载和运行我的应用程序,而不影响应用程序的其他功能。
欢迎任何评论或建议。
我目前正在开发一款使用Google地图API的安卓应用。
我想知道所有安卓设备是否都支持地图API,因为这个API是一个可选API并且是平台的附加组件。
我担心我的应用程序无法在某些设备上运行。
我需要知道的是如何以编程方式检测设备是否支持地图API,并捕获异常并执行其他操作。
因为使用地图功能只是我的应用程序的其中一个功能,所以我希望那些不支持地图API的设备仍然能够下载和运行我的应用程序,而不影响应用程序的其他功能。
欢迎任何评论或建议。
除了已描述的解决方案外,我还使用了以下解决方案
<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);
}
}
在尝试调用之前,我需要查看库是否存在,以便提前填写相关的偏好设置。以下是我编写的检查代码。
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
。
你说得对,一些设备如Archos 5IT和某些平板电脑没有Google地图、Android市场等应用。
这是我的代码。 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();
}
也许有其他方法可以在创建应用程序并显示消息时找到它。这可能更好。
<uses-library android:name="com.google.android.maps" android:required="false" />
,这样就能够将应用程序部署到模拟器上了。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-library 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
您仍然可以在应用程序中保留所有maps-api代码(无需2个版本),只需编写UI以防止其运行即可(在我的情况下,我将首选项变灰)。如上所述,上述技术有效地预测了某些不起作用的内容,并允许您做出响应(无FC),而不仅仅是对问题做出反应。
通过使用adb
,打印所有系统库:
adb shell cmd package list libraries
library:com.google.android.maps
<uses-library android:name="com.google.android.maps" />
这将防止用户安装您的应用程序或在市场上看到它,不确定是哪一个,也许两者都有。
据我所知,可选的 API 只适用于模拟器。API 级别的两个不同版本仅适用于模拟器,我认为真实设备应该都有地图 API。