我需要使用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指针并传递给定的参数。但是正如我在上面的评论中提到的——你真的不想这样做,除非你完全控制了它所运行的硬件。对操作系统的任何改变,甚至是一个小补丁,都可能改变这个函数的签名,或者完全删除它,从而破坏你的应用程序。