我想要android相机返回的字节数组。因为我期望同步得到它我正在做下面的代码等待回调完成...但是来自c ++我觉得有些东西我不能正确。在我的函数中,我想返回回调中提供的字节数组。我尝试了几种组合,直到这个仍有问题。在同一个下面,jpegCallback.jpgData给出"找不到符号(字段jpgData)"。 (我在Qt上这样做,但我认为这个问题与java(和我)严格相关)。感谢您的任何见解。
public static byte[] CameraTakePicture(){ final CountDownLatch jpgWaiter = new CountDownLatch(1); Camera.PictureCallback jpgCallback=new Camera.PictureCallback(){ public byte[] jpgData; @Override public void onPictureTaken(byte[] data,Camera cam){ jpgData=data; jpgWaiter.countDown(); } }; camera.takePicture(null,null,null,jpgCallback); jpgWaiter.await(); byte[] jpgData=jpgCallback.jpgData.clone(); return jpgData; }
答案 0 :(得分:1)
您正在创建一个匿名内部类,这意味着它是PictureCallback
的未命名子类。由于PictureCallback
界面未声明jpgData
字段,因此您无法访问该字段。
另外,一般来说,将那种异步调用转换为同步模式并不是一个好主意。为什么不回复Future<byte[]>
?
答案 1 :(得分:1)
从Java角度来看,jpgCallback
的类型为Camera.PictureCallback
,运行时不知道类型为jpgData
的对象中是否存在公共Camera.PictureCallback
字段
您必须将Camera.PictureCallback
子类化才能访问您的公共字段。