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