こんにちは、この問題の修正に問題があります。
ImageAvailableコールバック内ですでにimageReader.closeが呼び出されていますが、それでもエラーが発生します。
Java.lang.IllegalStateException:maxImages(1)はすでに取得されています。さらに取得する前に、#closeを呼び出してください。
私が持っているコードはここにあります:
private ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener()
{
@Override
public void onImageAvailable(ImageReader reader) {
Image img = mReader.acquireLatestImage();
mReader.close();
}
};
ps。私も引数リーダーを使用していますが、問題を解決していないようです
問題は解決しました。 ImageReaderではなくimgオブジェクトを閉じる必要があります。
private ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
String status = Environment.getExternalStorageState();
if (!status.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(getApplicationContext(), "your SD card is not available", Toast.LENGTH_SHORT).show();
return;
}
Image image = reader.acquireNextImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
image.close();//after you use the image's content ,you can close it
String filePath = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
String picturePath = System.currentTimeMillis() + ".jpg";
imgFile = new File(filePath, picturePath);
Uri uri = Uri.fromFile(imgFile);
try {//Store to folder
FileOutputStream fileOutputStream = new FileOutputStream(imgFile);
fileOutputStream.write(data);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
startEditPictureActivity(uri, imgFile);
}
};