【问题标题】:Implementing a File Dialog in Android TV Leanback在 Android TV Leanback 中实现文件对话框
【发布时间】:2016-12-06 21:58:39
【问题描述】:

我有一个 dirPath String 变量,我希望能够将其更改为我为 Android TV 应用程序选择的目录。我发现 Leanback 框架的类似幻灯片的界面对于更细微的操作来说有点麻烦,但我想尽可能坚持下去,因为我是 Android 和 java 的初学者。

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

我最好的猜测是使用GuidedStepFragments。为了选择目录而引入整个选项页面(请参阅我之前关于leanback 的类似幻灯片的 UX 的评论)感觉有点不雅,但看起来我别无选择?其次,我在GuidedActions 中看不到任何文件对话框小部件。也许我错过了它,或者 Google 热衷于将文件选择引导到在线而不是本地。


其他信息:

我正在尝试扫描dirPath 的所有子目录中的mp3flac 文件,然后将路径、元数据等添加到SQLite 数据库中我已经在处理虚拟数据了。我避免使用mediastore,因为它有太多限制,尤其是它无法访问网络共享,这对我来说是访问 NAS 所需要的。

一旦用户指定了dirPath 并启动了扫描,我会将其传递给AsyncTask,以便在与 UI 不同的后台线程上运行。


总结:

我正在尝试使用 AsyncTask 在与 UI 不同的线程中扫描 Android TV 设备的附加存储以查找音乐文件。扫描将输入dirPath String 变量,并将检查此路径及其所有音乐文件的子目录,然后将其传递给元数据提取器,然后将相关数据存储在 @ 987654333@数据库。

我想我对实现扫描有一定的了解(Google 提供了示例),并且已经成功实现了将虚拟数据插入数据库。我似乎无法管理的是提供一种简单的方法,让用户使用 Android TV 的 Leanback 库选择要扫描的路径。显然,这在 Leanback 中不可用。有没有一种方法可以实现这不是一场噩梦?我正在寻找尽可能简单的目录选择对话框。如果它必须使用整个选项页面,ala GuidedStepFragments,就这样吧。

【问题讨论】:

    标签: android android-studio android-tv leanback


    【解决方案1】:

    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(仍在研究中)

    【讨论】:

    • 谢谢迈克尔。苦乐参半,因为我很高兴我没有错过一些明显的事情,但很遗憾就是这种情况。令人失望的是,Android TV 的意图似乎是鼓励开发人员避免使用本地存储。像盾牌这样的设备有很多功能。我知道这仍然是一项可行的任务,如果冗长的话,但超出了我的舒适区,所以我可能会提出这个问题以获得一个坚实的起点。也许答案(如果有的话)也会对您有所帮助。
    • 嘿@biscuitstack,关于路径/文件选择器,您可以查看github.com/spacecowboy/NoNonsense-FilePicker。定义了正确的主题(我从leanback 主题中获取了颜色),它在GuidedStepFragment UI 上看起来还不错。我唯一更改的是onLoadFinished 中的requestFocus,否则dpad 导航会出现一些问题。可悲的是,我没有足够的声誉来用源示例写出正确的答案。
    • “Android TV 中不提供存储访问框架”——ACTION_OPEN_DOCUMENT 在 NVIDIA Shield 2017 上可用,正如我刚刚测试的那样。效果与您预期的一样。
    • @CommonsWare 并且它仅在 nvidia shield 上可用。用 shield、mibox、sony tvs 测试。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以使用任何现有的文件浏览逻辑,并为您的案例实现带有自定义视图的对话框。您可以查看 Es 文件资源管理器应用程序以供参考。在 Android TV 中,您可以实现并向用户显示您希望的任何视图。 'nextFocusDown','nextFocusUP','nextFocusLeft' , 'nextFocusRight' 让每个视图都能在 ui 组件之间轻松导航。如果您想向用户展示编辑文本,请注意没有特殊键盘(如数字键盘等),请为 Leanback 展示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-23
        • 2017-06-05
        相关资源
        最近更新 更多