在Android TV Leanback中实现文件对话框

10

我有一个dirPathString变量,我希望能够将其更改为我选择的目录,用于Android TV应用程序。我发现Leanback框架的幻灯片式界面对于微妙的操作有点笨重,但是我想尽可能地坚持使用它,因为我完全是初学者,对Android和Java都不熟悉。

因此,试图坚持最佳实践,我希望用户能够更改dirPath以指向他们选择的目录(dirPath被用作扫描指定目录及其子目录中的音乐所用的变量)。在其他平台上,我会寻找一个标准的文件打开对话框,但我似乎在Leanback框架中找不到这样的对话框。

我最好的猜测是使用GuidedStepFragments。这感觉有点不雅观,因为要选择一个目录就需要引入整个选项页面(参见我早期关于leanback幻灯片式UX的评论),但看起来我别无选择?其次,在GuidedActions中,我没有看到任何文件对话框小部件。也许我错过了,或者Google更倾向于将文件选择指向在线而不是本地。


额外信息:

我试图扫描dirPath的所有子目录中的mp3flac文件,然后将路径、元数据等添加到我已经使用虚拟数据开发的SQLite数据库中。我避免使用mediastore,因为它有太多限制,特别是无法访问网络共享,这对于我来说访问NAS会很方便。

一旦用户指定了“dirPath”并启动了“scan”,我将把它传递给“AsyncTask”在UI的另一个后台线程上运行。
总结: 我正在尝试使用“AsyncTask”在与UI不同的线程中扫描Android TV设备的附加存储器以查找音乐文件。“扫描”将得到“dirPath”字符串变量,并检查此路径及其所有子目录以查找音乐文件,然后将相关数据传递给元数据提取器,最后将其存储在SQLite数据库中。
我认为我已经理解了如何实现扫描(Google提供了示例),并已成功地将虚拟数据插入数据库。但是我似乎无法提供一种简单的方式让用户使用Android TV的“Leanback”库选择要扫描的路径(s)。显然这在“Leanback”中是不可用的。有没有一种方法可以实现这一点而不是噩梦?我正在寻找尽可能简单的目录选择对话框。如果必须使用整个选项页面,例如“GuidedStepFragments”,那就这样做吧。
3个回答

6

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电视上它不起作用(仍在研究中)。

谢谢Michael。这有点苦乐参半,因为我很高兴自己没有错过什么显而易见的东西,但同时也感到难过。让开发者避免使用本地存储似乎是Android TV意图鼓励的,这令人失望。像Shield这样的设备具有很多功能。我知道这仍然是可行的任务,虽然有些冗长,但超出了我的舒适区,所以我可能会悬赏这个问题,以获得一个坚实的起点。也许答案(如果有的话)也会对你有所帮助。 - biscuitstack
1
嘿@biscuitstack,关于路径/文件选择器,您可以查看https://github.com/spacecowboy/NoNonsense-FilePicker。使用正确定义的主题(我从leanback主题中取色),它在GuidedStepFragment UI上看起来还不错。我唯一改变的是在“onLoadFinished”中请求焦点,否则会有一些dpad导航问题。遗憾的是我没有足够的声望来编写带有源示例的适当答案。 - Michael Sotnikov
“Storage Access Framework在Android TV上不可用” - 我刚测试了,ACTION_OPEN_DOCUMENT在NVIDIA Shield 2017上是可用的。它的工作方式与您预期的基本相同。 - CommonsWare
@CommonsWare 只能在 NVIDIA Shield 上使用。已在 Shield、Mibox 和 Sony 电视上进行了测试。 - Michael Sotnikov

0

目前存储访问框架不是 Android TV 的一部分,但是可以使用 GuidedStepFragment 构建自己的文件选择器,通过在本地文件系统上逐步浏览文件夹,直到找到要选择的文件夹。


0

你可以使用任何现有的文件浏览逻辑,并实现一个带有自定义视图的对话框来适应你的情况。你可以参考Es文件浏览器应用程序。在Android TV中,你可以实现并向用户展示任何你想展示的视图。秘诀是每个视图都要有"nextFocusDown"、"nextFocusUP"、"nextFocusLeft"、"nextFocusRight",以便在UI组件之间进行轻松导航。如果你想向用户呈现edittext,请注意,像数字键盘等特殊键盘没有为Leanback准备好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接