2011-09-12 54 views
0

我有一个关于Android编程的问题。我打算编写Androiod 2.2及更高版本的应用程序(包括平板电脑)。我面对的问题是,各种版本都有不同的API新闻,例如下载管理器在2.3中首次完全实现,在2.2中我必须手动编程。我正在考虑从模块构建我的应用程序,其中每个模块都适用于特定的Android操作系统版本。你可以把它想象成主要的应用程序,根据实际的操作系统,它会触发Android 2.3 API下载管理器或(在2.2的情况下)启动我自定义的下载管理器。针对特定Android版本的编程

问题是,如何在代码中解决它?因为,当我进入我的2.2项目的.java文件,下载管理器导入并使用它的代码时,我无法构建应用程序。我发现了DexClassLoader解决方案,我只安装应用程序的核心和其他“模块”,我将根据当前设备的API级别从外部来源读取。这听起来像“肮脏”的做法,是不是有什么“更清洁”如何解决特定的代码片段,根据API的水平不同?

感谢亚

+0

您需要确保2.2代码不会触及任何不存在的内容,因此请将下载管理器分成两类,downloadManagerOld和downloadManagerNew,并在必要时调用它们。 – Rob

+0

是的,但如果我在2.2项目中同时使用了两个版本(旧版本和新版本),我将不会构建我的项目,因为新下载管理器的代码将是未知的 – Waypoint

+0

将版本设置为2.3,将minSDK设置为2.2。 – Rob

回答

1

有一种方法来检查,如果一个类(如下载管理器)可在运行的系统上通过尝试加载类是这样的:如果该异常是

try { 
Class.forName(className); 
} catch (ClassNotFoundException e) { 
} 

抛出,你知道这个班不可用。然后你必须使用你自己的班级。另一方面,如果班级可用,则必须使用单独的班级才能使用班级。

因此,包含调用API的类在某些系统上不可用的类永远不会加载到不支持的系统上。

当然,在这种情况下,您必须使用支持您要实现的类的TargetSDK。

+0

谢谢这是可能的解决方案之一,模块,这是没有被讨论过,是解决方案nr。 2 – Waypoint

相关问题