我有android应用程序,它使用了很多c ++本机代码。应用程序需要使用位于SD卡上的文件(读取,创建,追加)。但Kitkat +拒绝为第三方应用程序写入SD卡。 Android 5引入了新的API,允许再次使用。
How to use the new SD card access API presented for Android 5.0 (Lollipop)?
我发现的所有示例和文档主要用于Java方面。本机代码的示例不存在或非常不清楚。所以我想问几个问题。
上面的链接包含了如何获取可以返回ParcelFileDescriptor的DocumentFile的有价值的示例。从这个对象我能够接收本机文件描述符 - ParcelFileDescriptor.getFd()。它是我通过jni发送到c ++代码的整数。
在c ++中,我用fdopen(fd)打开文件。
我的问题是:
谢谢
编辑:我getFD和detachFD工作。但我从来没有找到答案如何正确替换ftruncate,它也需要写访问权限,而且我没有找到ftruncate版本,它接受文件描述符就像输入
答案 0 :(得分:0)
尝试以下链接:
Android - 仅从本机代码编写/保存文件: Android - writing/saving files from native code only
Android NDK写文件: Android NDK Write File
Android NDK中的文件操作: File Operations in Android NDK
答案 1 :(得分:0)
1)是的,使用文件描述符和fdopen 2)
ParcelFileDescriptor
。ParcelFileDescriptor
。 (这是关闭你的java引用) Fd只是表示文件的linux id的int
。在本地:
两个关闭正在做不同的事情。
注意:您仍需要该文件或更高根目录的SAF权限。