如何在Kotlin从Android SDK反射和使用它的接口?



我需要使用Android Camera类中未在SDK中导出的接口。它是这样设置的

//interface defined as
public interface Camera$CameraMetaDataCallback {
void onCameraMetaData(byte[] data, Camera camera);
};
//set callback defined
class Camera {
...
public final void setMetadataCb(CameraMetaDataCallback cb)
{
mCameraMetaDataCallback = cb;
native_setMetadataCb(cb!=null);
}
...
} 

我可以得到接口类,我假设与

val CameraMetaDataCallback = Class.forName("Camera$CameraMetaDataCallback").kotlin

的方法
val CameraSetMetadataCb = Camera::class.java.getMethod("setMetadataCb", CameraMetaDataCallback.java)

但是我如何实际使用接口对象并设置回调?

您将使用cameraSetMetadataCb.invloke(objectToCallItOn, param1, param2, param3, ...)调用由cameraSetMetadataCb对象引用的方法,使用objectToCallOn作为this指针并传递给定的参数。但是正如我在上面的评论中提到的——你真的不想这样做,除非你完全控制了它所运行的硬件。对操作系统的任何改变,甚至是一个小补丁,都可能改变这个函数的签名,或者完全删除它,从而破坏你的应用程序。

最新更新