检查方法是否存在



我想检查方法Camera.Parameters.getHorizontalViewAngle()是否存在于设备上(它只能从API 8和我的最小SDK API是7)。我试图使用"反射",如这里所解释的,但它捕获了一个错误,说参数的数量是错误的:

java.lang.IllegalArgumentException: wrong number of arguments

有人能帮忙吗?

Camera camera;
camera = Camera.open();
Parameters params = camera.getParameters();
Method m = Camera.Parameters.class.getMethod("getHorizontalViewAngle", new Class[] {} );
float hVA = 0;
try {
    m.invoke(params, hVA);
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

m.invoke(params, hVA);

应为

m.invoke(params, null);

Camera.Parameters.getHorizontalViewAngle()不接受任何参数,上面一行有参数hVA。如果您正在寻找返回变量,请执行hVA = m.invoke(params, null);

我个人建议有条件的类加载,在这种情况下,您将新api代码隔离在仅在兼容设备上触摸的类中。我只在真正轻量级的东西上使用反射(例如,为ContactsContactsContract找到正确的CONTENT_URI值)。

例如,这个示例项目使用一个抽象类的两个实现来处理查找Camera对象——在Gingerbread设备上,它尝试使用前置摄像头。

或者,这个示例项目展示了在Honeycomb上使用操作栏,包括在其中放置一个自定义视图,同时仍然保持对旧版本Android的向后兼容性。

我知道这是一个hack,但是为什么你不能把对方法的第一个调用放在它自己的try/catch中,并在那里嵌套剩下的try/catch代码呢?如果外部catch执行,则方法不存在。

相关内容

  • 没有找到相关文章

最新更新