Java 存储访问框架和本机代码

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部分(我没有编写,但可以修改/扩展)可以加载两

我想开发一个应用程序,使用JNI本地代码处理提供的文件

通过调用
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卡访问权限,然后它将是可访问和可写的,但这似乎是不可能的。。。谢谢,不用了。不幸的是,似乎没有一个灵巧的解决方案。也许这将帮助您: