Реализация файлового диалога в Android TV Leanback

У меня есть переменная dirPath String, которую я хочу изменить на каталог по своему выбору для приложения Android TV. Я нахожу интерфейс Leanback, похожий на слайд-шоу, немного громоздким для более тонких действий, но я хотел бы придерживаться его, когда смогу, поскольку я новичок в Android и Java в целом.

Итак, пытаясь придерживаться лучших практик, я хотел бы, чтобы пользователь мог изменить dirPath, чтобы указать на каталог по своему выбору (dirPath используется в качестве переменной для поиска музыки в указанном каталоге и его подкаталогах). На других платформах я бы поискал стандартный диалог открытия файла для ОС, но не могу найти его в фреймворке Leanback.

Лучше всего использовать GuidedStepFragments. Кажется немного неэлегантным вводить всю страницу параметров (см. мой предыдущий комментарий о UX, похожем на слайд-шоу) только ради выбора каталога, но похоже, что у меня мало выбора? Во-вторых, я не вижу никаких виджетов файлового диалога среди Управляемые действия. Возможно, я пропустил это, или Google стремился направить выбор файлов в онлайн, а не локально.


Дополнительная информация:

Я пытаюсь сканировать файлы mp3 и flac во всех подкаталогах dirPath, а затем добавляю пути, метаданные и т. д. в базу данных SQLite, с которой я уже работаю с фиктивным данные. Я избегаю mediastore, поскольку у него слишком много ограничений, в частности невозможность доступа к сетевым ресурсам, что было бы желательно для меня при доступе к NAS.

Как только пользователь назначит dirPath и начнется сканирование, я передам это AsyncTask для запуска в отдельном фоновом потоке из пользовательского интерфейса.


Подводя итог:

Я пытаюсь сканировать подключенное хранилище устройства Android TV на наличие музыкальных файлов, используя AsyncTask в потоке, отличном от пользовательского интерфейса. Сканированию будет передана переменная dirPath String, и он проверит этот путь и все его подкаталоги на наличие музыкальных файлов, которые затем будут переданы в средство извлечения метаданных перед сохранением соответствующих данных в базе данных SQLite.

Я думаю, что у меня есть некоторое представление о реализации сканирования (Google предоставляет примеры), и я успешно реализовал вставку фиктивных данных в базу данных. Чего я никак не могу добиться, так это предоставить простое средство, позволяющее пользователю выбирать пути для сканирования с помощью библиотеки Leanback Android TV. По-видимому, это недоступно в Leanback. Есть ли способ, которым я могу реализовать это, это не кошмар? Я ищу как можно более простое диалоговое окно выбора каталога. Если он должен использовать всю страницу опций, аля GuidedStepFragments, так тому и быть.


person biscuitstack    schedule 01.08.2016    source источник


Ответы (3)


В библиотеке Leanback такого сборщика нет. если Вы решите внедрить, обратите внимание, что Storage Access Framework недоступен в Android TV:

// from AOSP:
// cts/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/
// DocumentsClientTest.java
private boolean supportedHardware() {
    final PackageManager pm = getInstrumentation().getContext().getPackageManager();
    if (pm.hasSystemFeature("android.hardware.type.television") || pm.hasSystemFeature("android.hardware.type.watch")) {
        return false;
    }
    return true;
}

Вы можете проверить intent.ACTION_GET_CONTENT (с необязательным Intent.createChooser), чтобы передать его другим приложениям, но, по моему опыту, это не работает на Sony Android TV (все еще изучаю это)

person Michael Sotnikov    schedule 02.08.2016
comment
Спасибо, Майкл. Сладко-горький, так как я рад, что не пропустил что-то очевидное, но грустно, что это так. Разочаровывает то, что цель Android TV, по-видимому, побуждает разработчиков избегать локального хранилища. Такие устройства, как Щит, способны на многое. Я знаю, что это все еще выполнимая задача, хотя и многословная, но вне моей зоны комфорта, поэтому я могу наградить этот вопрос, чтобы получить надежную отправную точку. Возможно, ответ (если он есть) поможет и вам. - person biscuitstack; 02.08.2016
comment
что Storage Access Framework недоступен в Android TV — ACTION_OPEN_DOCUMENT доступен на NVIDIA Shield 2017, как я только что протестировал его. Работает почти так, как вы ожидаете. - person CommonsWare; 13.12.2017
comment
@CommonsWare и он доступен только на щите nvidia. Проверено с щитом, mibox, телевизором sony. - person Michael Sotnikov; 15.12.2017

В настоящее время Storage Access Framework не является частью Android TV, хотя можно создать собственное средство выбора файлов с помощью GuidedStepFragment для просмотра папок в локальной файловой системе, пока не найдете ту, которую хотите выбрать.

person Nick Felker    schedule 10.08.2016

Вы можете использовать любую уже существующую логику для просмотра файлов и реализовать диалог с пользовательским представлением для вашего случая. Вы можете проверить приложение Es File Explorer для справки. В Android TV вы можете реализовать и показать пользователю любой вид, который вы пожелаете. Мантра 'nextFocusDown','nextFocusUP','nextFocusLeft' , 'nextFocusRight' для каждого представления, чтобы иметь простую навигацию между компонентами пользовательского интерфейса. Если вы хотите представить пользователю текст редактирования, будьте осторожны, так как нет специальных клавиатур, таких как цифровая клавиатура и т. Д., Предоставьте для Leanback.

person NIPHIN    schedule 19.09.2016