Android Kolin: После переустановки приложения пропадают права на изображения

Приложение работает нормально. В SQLite хранятся ссылки. Однако после удаления и повторной инсталяции, восстановления БД, при попытке открыть фрагмент с изображением получаю:

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord .... requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

на:

binding.imView.setImageURI(Uri.parse(imageUri))

Добавление:

cntx.contentResolver.takePersistableUriPermission(Uri.parse(imageUri), (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION))

Подправило ситуацию, хотя бы не вываливается приложение, но:

java.lang.SecurityException: No persistable permission grants found for UID 10334 and Uri content://com.android.providers.media.documents/document/image:13239

Как я понимаю, после переустановки пропадают права, полученные через:

cntx.contentResolver.takePersistableUriPermission(Uri.parse(imageUri), (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION))

Есть ли способ сохранить их? Как можно еще хранить изображения, что бы сохранилась работоспособность, но без хранения BLOB в БД?

Код:

private fun init() {  ...  
if(imageUri != "empty") {  
    try {
        cntx.contentResolver.takePersistableUriPermission(Uri.parse(imageUri), (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION))
        binding.imView.setImageURI(Uri.parse(imageUri))
    } catch (e: Exception) {
        Toast.makeText(cntx, "Изображение необходимо выбрать еще раз", Toast.LENGTH_SHORT).show()
    }
    binding.imLayout.visibility = View.VISIBLE
}  
}  

override fun onActivityResult(requestCode: Int, resultCode: Int, result: Intent?) {
super.onActivityResult(requestCode, resultCode, result)
if (resultCode == AppCompatActivity.RESULT_OK && requestCode == IMAGE_REQUEST_CODE) {
    binding.imView.setImageURI(result?.data)
    imageUri = result?.data.toString()
    cntx.contentResolver.takePersistableUriPermission(result?.data!!, (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION))
}  
}

Ответы (0 шт):