我使用 IR blaster 创建了一个 Android 应用程序,我希望我的代码检查 Android 设备是否支持这些库。当另一台设备安装我的应用程序时,它会崩溃。我怎样才能避免这种情况?
我希望我的代码能够获取有关手机是否支持我的应用程序的信息。
我使用 IR blaster 创建了一个 Android 应用程序,我希望我的代码检查 Android 设备是否支持这些库。当另一台设备安装我的应用程序时,它会崩溃。我怎样才能避免这种情况?
我希望我的代码能够获取有关手机是否支持我的应用程序的信息。
这是与加载 JDBC 驱动程序类似的问题。如果驱动程序不存在,您不想让整个应用程序崩溃。
解决方案的基本原理是使用Class.forName()
这使您可以检查该类是否存在,如果不存在则抛出异常。
编辑:
需要明确的是 - 这样做的原因以及为什么这是必要的原因是,如果 Java 因为没有类而无法执行代码,那么 Java 会将其视为灾难性故障(错误- 特异性为NoClassDefFoundError)。因此,执行对缺失类的任何直接引用都会引发此错误。根据文档:
当错误被抛出时,它们不应该被应用程序代码捕获。
但是,当Class.forName()
无法找到类(或更直接调用ClassLoader)时,会引发异常。因为这是一个异常而不是一个错误,所以它可以被捕获。并且由于该函数将字符串作为参数,因此您不需要直接引用该类(只需在字符串中给出它的名称),因此可以在不直接引用该类的情况下执行检查,从而不会使您的程序崩溃。