1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| object StorageCompat {
fun saveFileCompat( context: Context, data: ByteArray, mimeType: String, displayName: String ): Uri? { return when { Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> { saveViaMediaStore(context, data, mimeType, displayName) } Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { if (hasStoragePermission(context)) { saveViaLegacyMethod(context, data, displayName) } else { requestStoragePermissionAndSave(context, data, displayName) } } else -> { saveViaLegacyMethod(context, data, displayName) } } }
fun getStoragePermissionState(context: Context): PermissionState { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val hasImages = ContextCompat.checkSelfPermission( context, Manifest.permission.READ_MEDIA_IMAGES ) == PackageManager.PERMISSION_GRANTED val hasVideo = ContextCompat.checkSelfPermission( context, Manifest.permission.READ_MEDIA_VIDEO ) == PackageManager.PERMISSION_GRANTED val hasAudio = ContextCompat.checkSelfPermission( context, Manifest.permission.READ_MEDIA_AUDIO ) == PackageManager.PERMISSION_GRANTED PermissionState(hasImages, hasVideo, hasAudio) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val hasStorage = ContextCompat.checkSelfPermission( context, Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED PermissionState(hasStorage, hasStorage, hasStorage) } else { PermissionState(true, true, true) } } data class PermissionState( val canReadImages: Boolean, val canReadVideo: Boolean, val canReadAudio: Boolean ) }
|