我想用我的 Android 应用程序获取一张照片并将其放在自定义文件夹中,这是创建的,但它会在“... DCIM/Camera”文件夹中生成一个副本。我不需要额外的副本。
我的基础来自https://developer.android.com/training/camera/photobasics
模拟器中不会出现这种情况,我尝试的手机版本是: LG-Q& 安卓: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)
}
}
}
}
}
证据:
最佳答案
在 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
关于java - 当我在 Android 应用程序中创建图像时拍照时,会在 DCIM/Camera 中生成副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60783447/