При отмене фотографии создается файл-призрак, который невозможно удалить. - PullRequest
0 голосов
/ 15 мая 2018

Я создал приложение, которое позволяет вам сохранять фотографию с определенным именем, процесс: 1-Вы пишете имя 2-Вы пишете тип операции 3-Вы нажимаете снимок 4-Вся информация в 1 & 2вставляется в имя и переносит вас в камеру.

Когда вы делаете снимок, все работает нормально, но если вы закрываете камеру вместо того, чтобы сделать снимок, создается файл-призрак с размером 0байт, и когда вы открываете его с галереей, он говорит, что файл не существует.

 int imgNbr = 0;
values = new ContentValues();
do{
    file = new File(Environment.getExternalStorageDirectory() + "/" + containerId.getText().toString() + "_" + dateInfo + "_" + eventType + "_" + imgNbr + ".png");
    Log.d("TAG", Integer.toString(imgNbr));
    values.put(MediaStore.Images.Media.DATA, Environment.getExternalStorageDirectory() + "/" + containerId.getText().toString() + "_" + dateInfo + "_" + eventType + "_" + imgNbr + ".png");
    values.put(MediaStore.Images.Media.TITLE, containerId.getText().toString() + "_" + dateInfo + "_" + eventType + "_" + imgNbr+ ".png");
    imgNbr++;
}
while(file.exists());

Log.d("TAG", "OUT OF WHILE WITH VALUE" + Integer.toString(imgNbr-1));

imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, PICTURE_RESULT);

Я пытался удалить его вручную по результату активности, но он не работает, все журналы возвращают false

@Override @Nullable
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK && requestCode == PICTURE_RESULT){
        Toast.makeText(getApplicationContext(),"Imagen guardada correctamente",Toast.LENGTH_SHORT).show();
    }
    else if (resultCode == RESULT_CANCELED && requestCode == PICTURE_RESULT){
        //file.delete();

        Log.d("TAG", "file.isFile()" + file.isFile());
        Log.d("TAG", "file.canRead()" + file.canRead());
        Log.d("TAG", "file.delete()" + file.delete());}}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я продолжал работать над кодом, и этот подход работал правильно, не создавая призрачных изображений после отмены.

            int imgNbr = 0;
            do{
                file = new File(Environment.getExternalStorageDirectory() + "/fotosHH/" + containerId.getText().toString() + "_" + dateInfo + "_" + eventType + "_" + imgNbr + ".png");
                imgNbr++;
            }
            while(file.exists());

            String imageFolderPath = Environment.getExternalStorageDirectory() + "/fotosHH";
            imgNbr--;
            String imageName = containerId.getText().toString() + "_" + dateInfo + "_" + eventType + "_" + imgNbr + ".png";
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imageFolderPath, imageName)));
            startActivityForResult(intent, PICTURE_RESULT);
0 голосов
/ 15 мая 2018

Вы должны удалить файл, если изображение было отклонено, примерно так:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

     super.onActivityResult(requestCode, resultCode, data);

     /**** TAKING PICTURE USING CAMERA****/
     if(requestCode == PICTURE_RESULT && resultCode == RESULT_CANCELED) {
        if(imageUri!=null){ // GLOBAL variable in your activity
           File f = new File(imageUri.getPath());
           f.delete();
        }
     }
     else if (requestCode == PICTURE_RESULT && resultCode == RESULT_OK) {
           // do your work
     }
}
...