Как сохранить скриншот в 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. Что мне не хватает?

0 ответов

Другие вопросы по тегам