Java 存储访问框架和本机代码
我想开发一个应用程序,使用JNI本地代码处理提供的文件 通过调用Java 存储访问框架和本机代码,java,android,c,file-io,java-native-interface,Java,Android,C,File Io,Java Native Interface,我想开发一个应用程序,使用JNI本地代码处理提供的文件 通过调用startActivityForResult()并带有Intent.ACTION\u OPEN\u文档Intent后,我会通过获取一个Uri。从这里我可以得到一个InputStream,ParcelFileDescriptor或类似的东西 是否有一种方法可以从中获得一些东西(例如文件),我可以将其传递到我的本机代码,以便它可以直接从内容提供商提供的文件中读取/写入 背景: JNI接口的C部分(我没有编写,但可以修改/扩展)可以加载两
startActivityForResult()
并带有Intent.ACTION\u OPEN\u文档
Intent后,我会通过获取一个Uri
。从这里我可以得到一个InputStream
,ParcelFileDescriptor
或类似的东西
是否有一种方法可以从中获得一些东西(例如文件
),我可以将其传递到我的本机代码,以便它可以直接从内容提供商提供的文件中读取/写入
背景:
JNI接口的C部分(我没有编写,但可以修改/扩展)可以加载两种数据
const char*filename
指定的文件,该文件可以使用open()
jbyteArray数组中包含组成“文件”的字节的数据
fopen()打开的文件路径const char*filename
Intent.ACTION\u OPEN\u DOCUMENT
打开文件时,在onActivityResult()
中获得的Uri
将转换为带有getContentResolver().openInputStream(Uri)
的输入流,然后读取到传递给本机代码的byte[/code>缓冲区中。完成本机代码后,它会将结果保存到一个临时文件中,该文件的路径会传递回Java端。然后,Java代码读取临时文件并将其内容放入从uri
获取的FileOutputStream
中
这显然是非常低效和丑陋的。嗨,你解决了这个问题吗?我有类似的问题,我需要从本机代码通过绝对路径访问外部SD卡上的文件。我想我可以通过SAF授予SD卡访问权限,然后它将是可访问和可写的,但这似乎是不可能的。。。谢谢,不用了。不幸的是,似乎没有一个灵巧的解决方案。也许这将帮助您: