diff --git a/src/plugins/sdcard/src/android/SDcard.java b/src/plugins/sdcard/src/android/SDcard.java index 19482901a..1b33e7ede 100644 --- a/src/plugins/sdcard/src/android/SDcard.java +++ b/src/plugins/sdcard/src/android/SDcard.java @@ -940,23 +940,28 @@ private void listDir(String src, String parentId, CallbackContext callback) { .execute( new Runnable() { public void run() { - Uri srcUri = Uri.parse(src); ContentResolver contentResolver = context.getContentResolver(); String parentDocId = parentId; - - if (parentDocId == null) { - parentDocId = DocumentsContract.getTreeDocumentId(srcUri); - } - - Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree( - srcUri, - parentDocId - ); - JSONArray result = new JSONArray(); Cursor cursor = null; try { + Uri srcUri = Uri.parse(src); + + if (parentDocId == null) { + if (!DocumentsContract.isTreeUri(srcUri)) { + Log.w("sdCard", "Cannot list non-tree URI: " + src); + callback.error("Cannot read directory."); + return; + } + parentDocId = DocumentsContract.getTreeDocumentId(srcUri); + } + + Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree( + srcUri, + parentDocId + ); + cursor = contentResolver.query( childrenUri, new String[] {