Android take more picture from camera “Couldn'

2019-09-05 02:10发布

I'm trying to take picture in sequence from Android, like a timelapse.

I call

 camera.takePicture(null, null, jpegCallback);

and my jpegCallback is:

PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        time++;
        photoCounter.setText(String.valueOf(time));

        SaveImageTask sav = new SaveImageTask(fileNameIND++);
        sav.execute(data);
        resetCam();
        Log.d(TAG, "onPictureTaken - jpeg");
    }
};

private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
    int name;

  SaveImageTask(int name){
      this.name = name;
  }

    @Override
    protected Void doInBackground(byte[]... data) {
        FileOutputStream outStream = null;

        // Write to SD Card
        try {
            File sdCard = Environment.getExternalStorageDirectory();
            File dir = new File (sdCard.getAbsolutePath() + "/TimeLaps");
            dir.mkdirs();



            java.text.NumberFormat nf = new java.text.DecimalFormat("000000");



            String fileName = (nf.format(name)+".jpg");
            File outFile = new File(dir, fileName);


            outStream = new FileOutputStream(outFile);

            outStream.write(data[0]);


            outStream.flush();
            outStream.close();

            Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());

            refreshGallery(outFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);


    }
}

But after taking about 20-30 picture I get:

E/Camera-JNI ] Couldn't allocate byte array for JPEG data

and data from PictureCallBack is null.

Why it happens?? IS the memory full?? How can I free memory??

Thank you so much

0条回答
登录 后发表回答