InDaPond
InDaPond

Reputation: 572

Getting a picture from an external file directory

I followed the Take photo guide of the Android developer documentation to take a picture. I want to use this picture for the Firebase MLKit, but I just need it temporarily, so I saved it to my private storage and delete if after I used it (I am extracting it's text).
So, I am using an Intent to let the capture be taken for me and save it to a specific file. If the Intent is done, how do I extract that picture so I can pass the bitmap to the Firebase API?
In the earlier stated documentation, it says

Note: If you saved your photo to the directory provided by getExternalFilesDir(), the media scanner cannot access the files because they are private to your app.

But it does not say how to access that file. That's my question: How do I access it?

For all interested in my code so far:

public class MainActivity extends AppCompatActivity {

static final int REQUEST_TAKE_PHOTO = 1;
private Uri photoURI;

//ToDo: delete picture at the end of app usage [finally->delete]

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            //ToDo:Logging/Toast msg
            // Error occurred while creating the File

        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            photoURI = FileProvider.getUriForFile(this,
                    "mypackagename",
                    photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
        } else {
            //ToDo: logging/Toast msg
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == Activity.RESULT_OK && requestCode == REQUEST_TAKE_PHOTO){
        //This is where I need to access the picture I saved.
    }else{
        //ToDo: logging/Toast msg
    }
}

public void scanText(View view) {
  //Firebase stuff, not relevant
}

String mCurrentPhotoPath;

private File createImageFile() throws IOException {
    // Create an image file name
    @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat
            ("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}
}

Upvotes: 0

Views: 151

Answers (1)

Aan
Aan

Reputation: 308

Add this line to get the image bitmap

 if(resultCode == Activity.RESULT_OK && requestCode == REQUEST_TAKE_PHOTO)
  {
    //This is where I need to access the picture I saved.
    // get the image bitmap from this code
     Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
  }
  else
  {
    //ToDo: logging/Toast msg
  }

Upvotes: 1

Related Questions