Как сохранить изображение ПОСТОЯННО после использования камеры, чтобы сделать снимок в android? - PullRequest
0 голосов
/ 28 апреля 2020

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

Здесь я создаю намерение использовать камеру в приложении.

public void captureImage(View view)
    {
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        if(cameraIntent.resolveActivity(getPackageManager())!=null)
        {
            File imageFile = null;
            try {
                imageFile = getImageFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(imageFile!=null)
            {
                Uri imageUri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", imageFile);
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(cameraIntent, IMAGE_REQUEST);
            }

        }

    }

Ниже приведен метод, в котором я создаю файл изображения, где изображение с камеры будет сохранено ВРЕМЕННО, как я понимаю.

    public File getImageFile() throws IOException {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmsss").format(new Date());
        String imageName = "jpg_"+timeStamp+"_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        //storageDir.mkdirs();
        perStorageDir=storageDir;
        File imageFile = File.createTempFile(imageName,".jpg", storageDir);
        currentImagePath = imageFile.getAbsolutePath();
        return imageFile;
    }

(С помощью currentImagePath я могу получить доступ к фотографии только во время работы приложения)

  1. getExternalFilesDir(Environment.DIRECTORY_PICTURES); вылетает мое приложение, если я пытаюсь вызвать его где-нибудь вне функции, я понятия не имею, почему.

  2. File.createTempFile(...) создает только временный файл. Как я могу сделать это постоянное добавление?

  3. Все другие соответствующие файлы в проекте были изменены соответствующим образом, чтобы установить разрешения и функции.

Все, что я хочу сделать, - это создать каталог и хранить в нем фотографии каждый раз, когда делается фотография. Даже если я закрою и снова открою приложение или не сделаю снимки с камеры, я хотел бы получить доступ к папке для старых изображений и тому подобного.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 28 апреля 2020

Если вы хотите сохранить его на постоянной основе, вы можете сохранить его App-Specifi c Storage . это тип хранилища, назначенный вашему имени пакета приложения.

Вы можете найти его в пути data / data / your-package-name , ознакомьтесь с официальной документацией , чтобы узнать больше об этом типе хранилища.

Мы должны также сохранить эти изображения во внешнем хранилище.

Шаг 1:

Предоставить разрешение на внешнее хранилище, поскольку вы получите доступ к этому хранилищу с помощью сохранение в нем изображений.

Шаг 2:

Откройте камеру с помощью Intent и создайте файл для снятого изображения.

    private void openCamera() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        photoFile = null;
        try {
            photoFile = FileHelper.createImageFile(this);

        } catch (IOException ex) {
        }

        if (photoFile != null) {
            photoURI = FileProvider.getUriForFile(this,
                    "your path",
                    photoFile);
            deleteFile(photoFile.getName());
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, CAMERA_RESULT);
            photoFile.deleteOnExit();
        }
    }
}

createImageFile () - это метод создания временного файла

   public static File createImageFile(Context context) throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp;
    File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
    ;
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir     /* directory */
    );
    return image;
}

Шаг 3:

Добавьте путь к вашему поставщику файлов

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
    name="external"
    path="." />
</paths>

В вашем манифесте объявите это Путь к файлу провайдера выглядит следующим образом:

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="cyour authority"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

Наконец, у меня есть полный репозиторий на GitHub , вы можете изучить его, я думаю, он может вам помочь.

Happy Coding ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...