diff --git a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml index d4028e8a70..7196abdb22 100644 --- a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml +++ b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml @@ -7,6 +7,10 @@ + + + + diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java index bf2506e106..888d430b0b 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/CheckPermissions.java @@ -26,13 +26,19 @@ public class CheckPermissions { return permissionsOK; } - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { - permissionsOK = Environment.isExternalStorageManager(); - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) { - // TODO: Workout scoped storage permission #10659 - } - } else { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + // < API 30 permissionsOK = checkPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); + } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + // API 30-32 + permissionsOK = Environment.isExternalStorageManager() || + checkPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); + } else { + // API 33+ + //https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions + // Manifest.permission.READ_MEDIA_AUDIO doesn't seem to be needed + permissionsOK = permissionsOK && checkPermission(activity, Manifest.permission.READ_MEDIA_IMAGES); + permissionsOK = permissionsOK && checkPermission(activity, Manifest.permission.READ_MEDIA_VIDEO); } return permissionsOK; diff --git a/android/help/android_images/keyman-storage-permission-34b.png b/android/help/android_images/keyman-storage-permission-34b.png new file mode 100644 index 0000000000..c124a9f31a Binary files /dev/null and b/android/help/android_images/keyman-storage-permission-34b.png differ diff --git a/android/help/android_images/keyman-storage-permission-ap.png b/android/help/android_images/keyman-storage-permission-ap.png index ff2762f643..4ed8fa3b68 100644 Binary files a/android/help/android_images/keyman-storage-permission-ap.png and b/android/help/android_images/keyman-storage-permission-ap.png differ diff --git a/android/help/troubleshooting/grant-storage-permission.md b/android/help/troubleshooting/grant-storage-permission.md index a6f04d754a..1b8554d7f0 100644 --- a/android/help/troubleshooting/grant-storage-permission.md +++ b/android/help/troubleshooting/grant-storage-permission.md @@ -2,15 +2,30 @@ title: How To - Granting Storage Permission --- -## Granting storage permission +## Granting Storage Permission If Keyman for Android is permanently denied storage access, attempts to install custom packages will fail with the notification "Storage permission request was denied". Perform these steps to grant Keyman for Android access to storage +### Android 11.0 to 12L Devices + Step 1) Go to Android Settings. Step 2) Depending on your device, click "Apps", "Apps & notifications", or "App permissions" and grant Keyman -storage permission. The screenshot below is from Android 9.0 Pie. +permission to access storage / "file and media". The screenshot below is from Android 12.0 S. -![](../android_images/keyman-storage-permission-ap.png) \ No newline at end of file +![](../android_images/keyman-storage-permission-ap.png) + +### Android 13.0+ Devices + +Step 1) +Go to Android Settings. + +Step 2) +Depending on your device, click "Apps" and grant Keyman permission to the following: + * Photos and videos --> Always allow all + +The screenshot below is from Android 14.0. + +![](../android_images/keyman-storage-permission-34b.png)