Я могу сделать снимок. Он сохраняется в галерее, но я не могу открыть его, когда пользователь нажимает кнопку.
Этот метод принимает изображение arsceneview.
private fun takePhoto() {
val filename = File("100MilArvores/"+System.currentTimeMillis()+".png")
Log.i("TESTE", "$filename")
val view = arSceneView
val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
val handlerThread = HandlerThread("PixelCopier")
handlerThread.start()
var path: String? = null
PixelCopy.request(view, bitmap, { copyResult ->
if (copyResult == PixelCopy.SUCCESS) {
try {
Log.i("TESTE", "isHere")
path = saveBitmapToDisk(bitmap, filename)
} catch (e: IOException) {
val toast = Toast.makeText(this@AugmentedRealityActivity, e.toString(),
Toast.LENGTH_LONG)
toast.show()
return@request
}
val photoURI = FileProvider.getUriForFile(this,
BuildConfig.APPLICATION_ID + ".provider", File(path!!))
val intent = Intent(Intent.ACTION_VIEW, photoURI)
intent.setDataAndType(photoURI, "images/*")
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
val snackbar = Snackbar.make(findViewById(android.R.id.content),
"Photo saved", Snackbar.LENGTH_LONG)
snackbar.setAction("Open in Photos") { v ->
val photoURI = FileProvider.getUriForFile(this,
BuildConfig.APPLICATION_ID + ".provider", File(path!!))
val intent = Intent(Intent.ACTION_VIEW, photoURI)
intent.setDataAndType(photoURI, "images/*")
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
}
snackbar.show()
} else {
val toast = Toast.makeText(this@AugmentedRealityActivity,
"Failed to copyPixels: $copyResult", Toast.LENGTH_LONG)
toast.show()
}
handlerThread.quitSafely()
}, Handler(handlerThread.looper))
}
Этот метод сохраняет изображения на диске. : I / TESTE: content: // media / external / images / media / 124157
private fun saveBitmapToDisk(bitmap: Bitmap, filename: File): String {
val file = MediaStore.Images.Media.insertImage(contentResolver, bitmap, filename.absolutePath, "Image")
Log.i("TESTE", "$file")
return file
}
В этой части кода
val photoURI = FileProvider.getUriForFile(this,
BuildConfig.APPLICATION_ID + ".provider", File("storage/emulated/0/Pitures/*"))
val intent = Intent(Intent.ACTION_VIEW, photoURI)
intent.setDataAndType(photoURI, "images/*")
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
Я получаю эту ошибку
E/AndroidRuntime: FATAL EXCEPTION: PixelCopier
Process: br.com.cem_mil_arvores, PID: 4642
java.lang.IllegalArgumentException: Failed to find configured root that contains /content:/media/external/images/media/124158
at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
at myPackageName.augmented_reality.activities.AugmentedRealityActivity$takePhoto$1.onPixelCopyFinished(AugmentedRealityActivity.kt:339)
at android.view.PixelCopy$1.run(PixelCopy.java:191)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Как я передаю путь, по которому мое изображение должно быть открыто в намерении.
Я настроил тег провайдера в Manifest и provider_path.xml в ресурсах xml.
Вотссылка, где я получил часть кода. Метод TakePhoto
Есть ли кто-нибудь, кто может помочь мне решить эту проблему?