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

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

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

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


附加信息:

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

一旦用户提名了dirPath并开始扫描,我就会将其传递给AsyncTask以便在UI的单独后台线程上运行。


总结:

我试图用与UI不同的线程在AsyncTask中扫描Android TV设备的附加存储以获取音乐文件。 该扫描将被送入dirPath字符串变量,并将检查该路径及其所有子目录中的音乐文件,然后将其传递到元数据提取器,然后将相关数据存储在SQLite数据库中。

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


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


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


您可以使用任何已有的逻辑进行文件浏览,并为您的案例实施一个带有自定义视图的对话框。 您可以检查Es File Explorer应用程序以供参考。 在Android TV中,您可以实施并向用户展示您所需的任何视图。 为了在UI组件之间轻松导航,每个视图的口头禅都是'nextFocusDown','nextFocusUP','nextFocusLeft','nextFocusRight'。 如果您想为用户提供edittext,请注意,因为没有特殊键盘,如数字键盘等,因此需要Leanback。

链接地址: http://www.djcxy.com/p/92613.html

上一篇: Implementing a File Dialog in Android TV Leanback

下一篇: Exception while adding contact in google.Internal server Error