web-dev-qa-db-ja.com

Android camera2:Java.lang.IllegalStateException:maxImages(1)はすでに取得されています。さらに取得する前に、#closeを呼び出してください

こんにちは、この問題の修正に問題があります。

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。私も引数リーダーを使用していますが、問題を解決していないようです

14
LittleFunny

問題は解決しました。 ImageReaderではなくimgオブジェクトを閉じる必要があります。

29
LittleFunny
    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);


    }
};
3
xiaoshuang tong