Как сохранить скриншот в Android API30
Я пытаюсь сохранить изображение в хранилище Android, он работает довольно хорошо, но когда доходит до диалогового окна разрешения, он немного ломается.
Когда я отказываю в разрешении на API 30, он больше не спрашивает, но на более низком уровне он работает хорошо.
Вот мой манифест
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"
tools:ignore="ScopedStorage"
/>
<application android:requestLegacyExternalStorage="true">
....
</application>
object Versions {
const val COMPILE_SDK = 30
const val MIN_SDK = 23
const val TARGET_SDK = 30
}
В моей деятельности у меня есть кнопка для сохранения изображения, и у меня есть этот код
private var permissionRequest: ActivityResultLauncher<Array<String>> =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
readPermissionGranted =
permissions[Manifest.permission.READ_EXTERNAL_STORAGE] ?: readPermissionGranted
writePermissionGranted =
permissions[Manifest.permission.WRITE_EXTERNAL_STORAGE] ?: writePermissionGranted
if (!readPermissionGranted || !writePermissionGranted) {
//Here the permissions are not granted show a toast
} else {
//method to save image
}
}
private fun updateOrRequestPermissions() {
val hasReadPermission = ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
val hasWritePermission = ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
val minSdk29 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
readPermissionGranted = hasReadPermission
writePermissionGranted = hasWritePermission || minSdk29
val permissionsToRequest = mutableListOf<String>()
if (!writePermissionGranted) {
permissionsToRequest.add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
if (!readPermissionGranted) {
permissionsToRequest.add(Manifest.permission.READ_EXTERNAL_STORAGE)
}
if (permissionsToRequest.isNotEmpty()) {
permissionRequest.launch(permissionsToRequest.toTypedArray())
} else {
//method to save image
}
}
И когда я нажимаю на кнопку, я называю это
updateOrRequestPermissions
. Что мне не хватает?