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))
}
}