我怀疑我阅读这些教程只是为了清楚地了解kitkat在更高版本的android How to use the new SD card access API presented for Android 5.0 (Lollipop)?中引入的SAF
How to persist permission in android API 19 (KitKat)?
Android API below 19 equivalent for ContentResolver takePersistableUriPermission
Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT
现在我有一个问题,当意图被触发,我得到选择SD卡从我得到的意图获得uritree但是我将不得不迭代通过uri获取特定文件uri的根树。 现在的问题是我的手机中有mp3文件,我想编辑所选择的特定文件,以便如何从树中获取所选文件uri并进行编辑?我尝试直接使用文件进行编辑但它使我的mp3文件消失,我不想再次再次发射SAF意图,所以如何检查用户是否已获得SD卡的许可? 附:我正在使用jaudio tagger来编辑mp3文件的标签。 谢谢!! 我已经得到了这个问题几乎所有内容的答案现在问题如果我使用jaudio tagger库来标记mp3文件,它将File作为对象,但android 4.4及以上版本不会让你修改File对象所以我只想知道替代方法我可以编辑上面4.4中的文件对象吗?
答案 0 :(得分:1)
这是我做的, 首先将文件从SD卡复制到手机记忆库,然后进行所需的更改,并将文件再次剪切并粘贴到原始位置。 这里是我编辑sdcard中mp3文件标签的例子: -
答案 1 :(得分:0)
您引用的库称为 JaudioTagger ,它不会,而且很可能永远不会接受 DocumentFile 。 Storage Access Framework 是Google的发明,远非任何标准。 JaudioTagger是为可移植性编写的。
但是,我最终设法使 JaudioTagger 主要与SAF一起运行,但是不得不对其进行实质性的修改,甚至重写某些功能。基本上,我用自己的类替换了所有 File 和 RandomAccessFile ,此外,还必须重写临时文件的处理和重命名(例如方案:复制原始文件,更改副本,删除原始文件,将副本重命名为原始名称。
实际上,使用本机的 TagLib 可能更容易,因为它已经接受了特殊的C ++类作为输入。我所做的就是创建这样一个C ++类,其基础是从ParcelFileDescriptor派生的文件描述符,该ParcelFileDescriptor派生自从DocumentFile派生的Uri。
最后,我们可能会得出一个结论,即存储访问框架不太理想。