Просмотр папки на предмет изменений на внешней SD-карте - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь прослушать изменения папок на внешней SD-карте на Android Api 26+, проблема в том, что я не понимаю реальный путь, я только получаю URI контента. Я почти все перепробовал:

1- сторонние библиотеки.

2- Environment.getExternalStorageDirectory ();

3- System.getenv ("SECONDARY_STORAGE")

4- System.getenv ("EXTERNAL_STORAGE")

5- Environment.getExternalStoragePublicDirectory ();

Я не могу получить доступ к внешней SD-карте, и мне нужен реальный путь для добавления в FileObserver. Любые предложения о том, как прослушать папку на SD-карте или как узнать ее путь?

1 Ответ

0 голосов
/ 05 марта 2020

Итак, после отладки я нашел способ получить путь к выбранной папке.

Сначала я строю uri, используя дерево документов

Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri,
                DocumentsContract.getTreeDocumentId(uri));

, и выполнил запрос по нему.

cursor = context.getContentResolver().query(contentUri,  null, null, null, null);

и получить данные в столбце document_id 1010 *

String string = cursor.getString(cursor.getColumnIndex("document_id"));

это будет что-то вроде XXX-XXX:DCIM/ffmpeg, если он находится на SD-карте, или primary:DCIM/ffmpeg, если он находится в внутреннее хранилище.

В конце я смог получить реальный путь, используя это:

String[] strings = string.split(":");
            String newPath = "/storage/" +
                    (strings[0].equals("primary")?"emulated/0/"+strings[1]:
                            string.replaceAll(":", "/"));

Это разделит данные в столбце на две части (мне интересно в первой строке только для того, чтобы узнать, находится ли он в SD-карте или нет). Если он находится на SD-карте, он добавит префикс /storage/ и заменит все двоеточия прямой косой чертой, если он находится в основном хранилище, он добавит префикс /storage/emulated/0/ и заменит двоеточия прямой косой чертой.

Я протестировал его на многих устройствах (даже на эмуляторе), и он работал нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...