0

画像を A​​ndroid ストレージに保存しようとしていますが、かなりうまく機能しますが、許可のダイアログが表示されると少し壊れます。

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。私は何が欠けていますか?

4

0 に答える 0