我花了很多时间调试只能在特定设备上重现的不同问题。
例如,我试图使用Intent从相机拍照。因为只有一组有限的设备按预期运行。
另一个例子是当我使用onPictureTakenCallback中的字节数组时:
public void onPictureTaken(byte[] data, Camera camera) {
byte[] tempData = new byte[data.length];
System.arraycopy(data, 0, dataTemp, 0, data.length);
///...
}
因此,如果我不复制,但在一段时间之后使用原始的“数据”阵列,那么我就会遇到麻烦,因为有些设备会在一段时间之后清理这个阵列。但是其他设备不进行此类清洁,因此无需复制即可完美运行。
又一个例子: 某些设备在以下情况下返回null:
Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
// sizes is null
但是大多数设备(我认为)会返回支持大小的列表。
所以我想知道是否有任何类型的知识库/常见问题解答?如果没有,让我们在这里发布我们面临的问题?
答案 0 :(得分:1)
我没有意识到这一点。但是您接收的字节数组是mmapped,并且控制另一个(本机)应用程序(因此,如果重新使用此缓冲区,则数据可以由相机应用程序自行决定)
最好的方法是尽快将其复制到安全的位置
至于预览尺寸 - 它们很乱。即使你得到这个列表,实际上也不支持所有分辨率(我在更大的分辨率上得到了段错误 - 某种程度上预览缓冲区不合适)。唯一的方法是通过依次激活它们并等待感知来探测是否实际支持这种预览尺寸