diff --git a/README.md b/README.md
index ae47fa3..3bf3ebd 100644
--- a/README.md
+++ b/README.md
@@ -160,7 +160,7 @@
 | &nbsp;&nbsp;&nbsp;`cache`                       | cacheDirectory              | cache                     | r/w  |     Yes     |     Yes\* |   Yes   |
 | &nbsp;&nbsp;&nbsp;`files`                       | dataDirectory               | files                     | r/w  |     Yes     |     No    |   Yes   |
 | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`Documents` |                             | documents                 | r/w  |     Yes     |     No    |   Yes   |
-| `<sdcard>/`                                     | externalRootDirectory       | sdcard                    | r/w  |     Yes     |     No    |   No    |
+| `<sdcard>/`                                     | externalRootDirectory       | sdcard                    | r/w\*\*\*  |     Yes     |     No    |   No    |
 | &nbsp;&nbsp;&nbsp;`Android/data/<app-id>/`      | externalApplicationStorageDirectory | -                 | r/w  |     Yes     |     No    |   No    |
 | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`cache`     | externalCacheDirectory       | cache-external            | r/w  |     Yes     |     No\*\*|   No    |
 | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`files`     | externalDataDirectory       | files-external            | r/w  |     Yes     |     No    |   No    |
@@ -173,6 +173,8 @@
      the contents yourself. Should the user purge the cache manually, the contents of the
      directory are removed.
 
+\*\*\* As of API 30, these directories are no longer writable.
+
 **Note**: If external storage can't be mounted, the `cordova.file.external*`
 properties are `null`.
 
diff --git a/plugin.xml b/plugin.xml
index 2eec461..0a2ee72 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -132,9 +132,6 @@
             </feature>
             <allow-navigation href="cdvfile:*" />
         </config-file>
-        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
-            <application android:requestLegacyExternalStorage="true" />
-        </edit-config>
         <config-file target="AndroidManifest.xml" parent="/*">
             <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
         </config-file>
diff --git a/src/android/FileUtils.java b/src/android/FileUtils.java
index cd2a338..c2b1ca0 100644
--- a/src/android/FileUtils.java
+++ b/src/android/FileUtils.java
@@ -88,6 +88,7 @@
     public static final int ACTION_GET_FILE = 0;
     public static final int ACTION_WRITE = 1;
     public static final int ACTION_GET_DIRECTORY = 2;
+    public static final int ACTION_READ_ENTRIES = 3;
 
     public static final int WRITE = 3;
     public static final int READ = 4;
@@ -285,6 +286,7 @@
         if (action.equals("testSaveLocationExists")) {
             threadhelper(new FileOp() {
                 public void run(JSONArray args) {
+                    
                     boolean b = DirectoryManager.testSaveLocationExists();
                     callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, b));
                 }
@@ -543,10 +545,16 @@
         }
         else if (action.equals("readEntries")) {
             threadhelper( new FileOp( ){
-                public void run(JSONArray args) throws FileNotFoundException, JSONException, MalformedURLException {
-                    String fname=args.getString(0);
-                    JSONArray entries = readEntries(fname);
-                    callbackContext.success(entries);
+                public void run(JSONArray args) throws FileNotFoundException, JSONException, MalformedURLException, IOException {
+                    String directory = args.getString(0);
+                    String nativeURL = resolveLocalFileSystemURI(directory).getString("nativeURL");
+                    if (needPermission(nativeURL, READ)) {
+                        getReadPermission(rawArgs, ACTION_READ_ENTRIES, callbackContext);
+                    }
+                    else {
+                        JSONArray entries = readEntries(directory);
+                        callbackContext.success(entries);
+                    }
                 }
             }, rawArgs, callbackContext);
         }
@@ -1236,6 +1244,15 @@
                         }
                     }, req.getRawArgs(), req.getCallbackContext());
                     break;
+                case ACTION_READ_ENTRIES:
+                    threadhelper( new FileOp( ){
+                        public void run(JSONArray args) throws FileNotFoundException, JSONException, MalformedURLException {
+                            String fname=args.getString(0);
+                            JSONArray entries = readEntries(fname);
+                            req.getCallbackContext().success(entries);
+                        }
+                    }, req.getRawArgs(), req.getCallbackContext());
+                    break;
             }
         } else {
            LOG.d(LOG_TAG, "Received permission callback for unknown request code");
