Проблемы с регистрацией фотографий в программировании для Android

Я реализую приложение для Android, используя камеру для фотографирования, а затем регистрирую его в External_storage\Android\data\com.abc.projectname.bf . Но после открытия камеры, даже если я не делаю снимок, файл изображения регистрируется в каталоге. Как я могу это решить, вот код:

public void onCapturePhoto(String fileName){
    //Intent to take photos


    File storageDirectory = requireActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    try {
        Log.d("#picName",fileName);
        File imageFile = File.createTempFile(fileName,".jpg",storageDirectory);

            currentPhotoPath = imageFile.getAbsolutePath();
            Uri imageUri= FileProvider.getUriForFile(requireActivity(),"com.ticanalyse.mheath.bf",imageFile);
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
        startActivityForResult(intent,1);
            Log.d("#image_length is ",String.valueOf(imageFile.length()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

//

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            //  imageView.setImageBitmap(imageBitmap);
//            File f = new File(currentPhotoPath);
////            Uri contentUri = Uri.fromFile(f);
//            Bitmap bitmap = BitmapFactory.decodeFile(currentPhotoPath);
//            //Convert bitmap to byteArray
//            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//            bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
//            byte[] byteArray = byteArrayOutputStream .toByteArray();
//            //Then convert to base64
//            encodedImage= Base64.encodeToString(byteArray, Base64.DEFAULT);
//            Log.d("#base64",encodedImage);


            //   setPic();

        }
    }

Не могли бы вы поделиться соответствующим кодом для лучшей справки?

Sujal Kumar 12.01.2023 05:58

@SujalKumar я нашел альтернативу проблеме. но теперь, если я открою камеру, а затем выйду из нее, файл 0Mo будет зарегистрирован в каталоге, даже если я не сделал ни одной фотографии. Какая проблема может вызвать это?

Patrick Renaud 12.01.2023 09:50

Нельзя быть уверенным, не видя кода.

Sujal Kumar 12.01.2023 15:12

@SujalKumar, вот код

Patrick Renaud 13.01.2023 09:16

Спасибо. Не могли бы вы тоже поделиться onActivityResult()? Я думаю, что удаление файла, если не было предпринято никаких действий, может решить вашу проблему, и это должно быть реализовано в самом этом методе.

Sujal Kumar 13.01.2023 17:11
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
1
5
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, получите объект imageFile из этой строки:

File imageFile = File.createTempFile(fileName,".jpg",storageDirectory);

... объявлен как глобальный в действии, подобном этому...

public class XYZActivity extends AppCompatActivity {
    private File imageFile;
    //onCreate(), onCapturePhoto(), etc methods
}

Затем в onCapturePhoto():

imageFile = File.createTempFile(fileName,".jpg",storageDirectory);

Теперь в onActivityResult(), если вы убедитесь, что изображение не было снято/нажато, вы можете попробовать удалить временный файл следующим образом:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == RESULT_OK) {
         //Your stuff...
    }
    else {
        //No photo was taken or clicked...
        //Thus, deleting the temporary file...
        if (file.exists()) {
            if (file.delete()) {
                Log.i("Process", "Deletion DONE!");
            }
        }
    }
}

Если я истолковал какую-либо часть проблемы нежелательным образом, сообщите мне об этом.

Другие вопросы по теме

Получить поле из LocalDate, которое имеет более одного события
Список элементов Android RecyclerView не изменяется должным образом после изменения настроек и снова переходит к фрагменту
Я создал нативное приложение, которое отлично работает в режиме отладки, но в выпуске APK появляется экран банка.
Приложение React Native для Android отлично работает в режиме отладки, но когда мы выпускаем apk, оно создает более старую версию приложения.
Потери входных данных при переходе между входными страницами формы
Приложение Cordova Ionic — push-уведомления не работают на Android 12 и Android 13 — Cordova-android 11.0
Есть ли какой-либо способ или пакет, который может периодически запускать фоновые задачи каждую минуту в трепетании
Как сделать прозрачный фон в Box Jetpack Compose
Доступ к изображениям во внешнем хранилище, созданным моим приложением
Android: анимация Lottie с динамическим текстом и проблема с пользовательским шрифтом