setImageURI не работает для файла содержимого
Я следую этой инструкции, чтобы написать программу для создания файла изображения как Uri
https://developer.android.com/training/camera/photobasics
Я использую это для создания файла URI
var photoURI:Uri?=null
val REQUEST_TAKE_PHOTO = 1
private fun dispatchTakePictureIntent() {
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(packageManager) != null) {
var photoFile: File? = null
try {
photoFile = createImageFile()
} catch (ex: IOException) {
}
// Continue only if the File was successfully created
if (photoFile != null) {
photoURI = FileProvider.getUriForFile(this,
"xxx.fileprovider",
photoFile)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
}
}
}
А затем используйте это, чтобы отправить Uri к другой деятельности
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode != RESULT_CANCELED){
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == Activity.RESULT_OK) {
var i=Intent(this, NewItemActivity::class.java)
i.putExtra("img", photoURI)
startActivity(i)
}
}
}
В другом упражнении я использую get uri и установил ImageView, но изображение не отображается на экране, я проверил изображение, сохраненное в телефоне
val img = intent.extras.get("img") as Uri
iv = findViewById(R.id.img)
iv?.setImageURI(img)
Я также нашел этот метод для установки изображения из URI, но все еще не работает
Как установить содержимое файла URI в ImageView?
var p = getPath(img)
var b = lessenUriImage(p)
iv?.setImageBitmap(b)
fun getPath(uri: Uri): String {
val projection = arrayOf(MediaStore.Images.Media.DATA)
val cursor = managedQuery(uri, projection, null, null, null)
val column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
cursor.moveToFirst()
return cursor.getString(column_index)
}
fun lessenUriImage(path: String): Bitmap {
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
var bitmap = BitmapFactory.decodeFile(path, options)
options.inJustDecodeBounds = false
var be = (options.outHeight / 320.toFloat()).toInt()
if (be <= 0)
be = 1
options.inSampleSize = be
bitmap = BitmapFactory.decodeFile(path, options)
val w = bitmap.width
val h = bitmap.height
println(w.toString() + " " + h)
return bitmap
}