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.
-
\ No newline at end of file
+
+
+### 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.
+
+