Assigned
Status Update
Comments
ng...@gmail.com <ng...@gmail.com> #2
PERMISSIONS
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
fu...@google.com <fu...@google.com>
xi...@google.com <xi...@google.com> #3
Caused by: java.io.IOException: No such file or directory
Could you make sure the target path exists and try again?
Description
When I delete the application and rebuild it gives me an error. Only happens when deleting and rebuilding, if run again there are no errors, everything is normal.
EXCEPTION:
androidx.camera.core.ImageCaptureException: Failed to create temp file
at androidx.camera.core.ImageCapture$3.onError(Unknown Source:11)
at androidx.camera.core.ImageSaver.lambda$postError$2(Unknown Source:2)
at androidx.camera.core.ImageSaver.c(Unknown Source:0)
at androidx.camera.core.q0.run(Unknown Source:8)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createTempFile(File.java:2018)
at java.io.File.createTempFile(File.java:2064)
at androidx.camera.core.ImageSaver.saveImageToTempFile(Unknown Source:53)
at androidx.camera.core.ImageSaver.run(Unknown Source:0)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
DEVICE: Samsung Galaxy Tab A7 Lite (Android 11)
defaultConfig {
applicationId "vn.ofvdms.ttsm.a8"
compileSdk 34
minSdkVersion 26
targetSdkVersion 28
def camerax_version = "1.3.4"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:${camerax_version}"
CAMERA CONFIG:
cameraUiContainerBinding?.cameraCaptureButton?.setOnClickListener {
// Get a stable reference of the modifiable image capture use case
imageCapture?.let { imageCapture ->
// Create time stamped name and MediaStore entry.
cameraUiContainerBinding?.cameraCaptureButton?.isClickable = false
// Create time stamped name and MediaStore entry.
val name = SimpleDateFormat("yyyyMMddHHmmss", Locale.US)
.format(System.currentTimeMillis())
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, name)
put(MediaStore.MediaColumns.MIME_TYPE, PHOTO_TYPE)
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
val appName = requireContext().resources.getString(R.string.app_name)
put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/${appName}")
}
}
// Create output options object which contains file + metadata
val outputOptions = ImageCapture.OutputFileOptions
.Builder(
requireContext().contentResolver,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
contentValues
)
.build()
// Setup image capture listener which is triggered after photo has been taken
imageCapture.takePicture(
outputOptions, cameraExecutor, object : ImageCapture.OnImageSavedCallback {
override fun onError(exc: ImageCaptureException) {
Log.e(TAG, "Photo capture failed: ${exc.message}", exc)
cameraUiContainerBinding?.cameraCaptureButton?.isClickable = true
}
override fun onImageSaved(output: ImageCapture.OutputFileResults) {
val savedUri = output.savedUri
lifecycleScope.launch {
savedUri?.let {
setGalleryThumbnail(savedUri.toString())
convertImageBitmap(it)
Log.d(TAG, "Photo capture succeeded: ${it.path}")
loadImageUri(savedUri)
}
}
cameraUiContainerBinding?.cameraCaptureButton?.isClickable = true
}
})
// We can only change the foreground Drawable using API level 23+ API
// Display flash animation to indicate that photo was captured
fragmentCameraBinding.root.postDelayed({
fragmentCameraBinding.root.foreground = ColorDrawable(Color.WHITE)
fragmentCameraBinding.root.postDelayed(
{ fragmentCameraBinding.root.foreground = null }, ANIMATION_FAST_MILLIS
)
}, ANIMATION_SLOW_MILLIS)
}
}
Specifically in the attached file "CameraFragment"