Когда я делаю снимок, при создании изображения в моем приложении android создается копия в DCIM / Camera - PullRequest
0 голосов
/ 21 марта 2020

Я хочу получить фотографию с моим приложением Android и поместить ее в пользовательскую папку, она создается, однако она создает копию в папке "... DCIM / Camera". Мне не нужна дополнительная копия.

Я беру базу из https://developer.android.com/training/camera/photobasics

Это не происходит в эмуляторах, версия телефона, которую я пробовал : LG-Q & Andorid: 8.1.0

Код:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    image = photo_image_v
    image.setOnClickListener {
        dispatchTakePictureIntent("sample", "sample")
    }

}

private fun dispatchTakePictureIntent(name: String, path: String) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && (ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.CAMERA
        ) != PackageManager.PERMISSION_GRANTED)
    ) {
        requestPermissions(arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION)
    } else {
        Intent(MediaStore.ACTION_IMAGE_CAPTURE).also {
            if (it.resolveActivity(this.packageManager) != null) {
                // Create the File where the photo should go
                var file = createImageFile(name, this, path)
                this@MainActivity.file = file
                var uri = FileProvider.getUriForFile(
                    this@MainActivity,
                    BuildConfig.APPLICATION_ID + ".provider", file
                )

                Log.i(this::class.java.canonicalName, "The url to save: $uri")
                it.putExtra(MediaStore.EXTRA_OUTPUT, uri)

                this@MainActivity.startActivityForResult(it, CAMERA_PERMISSION)
                }
        }

    }
}

private fun createImageFile(name: String, activity: Activity, imagePath: String): File {
    // Create an image file name
    var storageDir = File(activity.filesDir, "images/${imagePath}")
    if (!storageDir.exists()) {
        storageDir = File(activity.filesDir, "images/${imagePath}")
        storageDir.mkdirs()
    }
    var file = File(storageDir, "${name}.png")
    file.createNewFile()

    Log.i(this::class.java.canonicalName, "Image created: ${file.exists()}")
    return file

}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (resultCode == RESULT_OK) {
        when (requestCode) {
            CAMERA_PERMISSION -> {
                //imageBitmap = data!!.extras!!.get(MediaStore.EXTRA_OUTPUT) as String
                var photo = file.absolutePath
                if (resultCode == Activity.RESULT_OK) {
                    Glide.with(this)
                        .load(photo)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .skipMemoryCache(true)
                        .into(image)

                }

            }
        }
    }
}

Доказательства:

Изображение в папке желаний enter image description here Скопируйте изображение в нежелательной папке enter image description here

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

В то время я не нашел ответа, поэтому единственное, что я могу найти, это использовать android .hardware.camera2 api. Хотя я думаю, что это займет гораздо больше времени, я считаю, что это лучший вариант.

0 голосов
/ 21 марта 2020

в createImageFile (), который вы вызываете "getExternalFilesDir (Environment.DIRECTORY_PICTURES)", это создаст копию в папке DCIM / Camera.

просто измените ее в папку, в которую вы хотите сохранить файл в.
см. https://developer.android.com/training/data-storage/app-specific#java

. Обратите внимание, что android 10 имеет различную обработку файлов в различных каталогах. https://developer.android.com/training/data-storage

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