在Android TV Leanback

时间:2016-08-01 18:01:59

标签: android android-studio android-tv leanback

我有一个dirPath String 变量,我希望能够将其更改为我选择的Android TV应用目录。我觉得Leanback框架的幻灯片式界面对于更微妙的动作来说有点麻烦,但是我想坚持下去,因为我是Android和java的完全初学者。

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

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

其他信息:

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

一旦用户提名mediastore并启动扫描,我就会将其传递给dirPath,以便在来自用户界面的单独后台线程上运行。< / p>

总结:

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

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

3 个答案:

答案 0 :(得分:4)

Leanback库中没有这样的选择器。 如果您决定实施,请注意,存储访问框架在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)将其转发给其他应用,但根据我的经验,它不适用于索尼Android电视(仍在调查)

答案 1 :(得分:0)

现在,存储访问框架不是Android TV的一部分,尽管可以使用GuidedStepFragment构建自己的文件选择器来遍历本地文件系统上的文件夹,直到找到您想要的文件夹为止。选择。

答案 2 :(得分:0)

您可以使用任何已有的逻辑进行文件浏览,并为您的案例实现具有自定义视图的对话框。您可以检查Es File explorer app以供参考。在Android TV中,您可以实现并向用户显示您希望的任何视图。对于每个视图,mantra是'nextFocusDown','nextFocusUP','nextFocusLeft','nextFocusRight',以便在ui组件之间轻松导航。如果你想向用户提供一个edittext,请注意没有特殊的键盘,如数字键盘等,为Leanback提供。