Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android NDK从字符串路径打开文件_Android_C++_Android Ndk_Java Native Interface - Fatal编程技术网

使用Android NDK从字符串路径打开文件

使用Android NDK从字符串路径打开文件,android,c++,android-ndk,java-native-interface,Android,C++,Android Ndk,Java Native Interface,我最近查阅了Android文件访问文档,但是我似乎不知道如何实际打开一个包含我想要打开的文件路径的字符串文件 我(最终)想要完成的是这样的事情: 用户使用意图选择特定类型的文本文件,并接收文件的URI。从这里我得到路径( GETPATH()/CUD>),并将此字符串传递给本机C++代码。 本地C++从字符串中打开文件,解析内容。 用上述方法执行一些实际工作 从我目前发现的情况来看,似乎不再可能以这种方式打开文件(至少从SDK版本26开始): 我知道存在的文件的硬编码路径给了我被拒绝的权限 从g

我最近查阅了Android文件访问文档,但是我似乎不知道如何实际打开一个包含我想要打开的文件路径的字符串文件

我(最终)想要完成的是这样的事情:

  • 用户使用意图选择特定类型的文本文件,并接收文件的URI。从这里我得到路径(<代码> GETPATH()/CUD>),并将此字符串传递给本机C++代码。
  • 本地C++从字符串中打开文件,解析内容。
  • 用上述方法执行一些实际工作
  • 从我目前发现的情况来看,似乎不再可能以这种方式打开文件(至少从SDK版本26开始):

    • 我知道存在的文件的硬编码路径给了我
      被拒绝的权限
    • getPath()
      接收的路径本身会触发
      无此类文件或目录的错误
    一种解决方法是使用
    ContentResolver
    在Java端打开文件,然后将文件描述符传递给本机端。这是可行的,但也有问题:这些文件可能包含对要打开的其他文件的引用(“包括文件”),从而使这种解决方案的使用受到限制

    为了让事情更清楚,这些文件位于Android系统的“USB”分区上,与应用程序本身无关。不作为APK的资源/资产或其他此类问题似乎需要的任何类似问题

    总之,我想问题是:给定应用程序Java端的路径,是否可以打开一个文件以及它引用的任何其他文件?执行此操作是否有任何要求,例如请求对文件夹或类似内容的正确权限?

    从Android 6.0(API级别23)开始,您需要在每次应用程序启动时为“”请求权限,例如访问文件系统或读取联系人。链接的页面已经有一段代码可以复制


    在较旧的手机上,在清单中请求权限已足够,但最近已将权限提升到8.0(=26)。如果您想支持6.0之前的设备,Android兼容性库将允许您调用相同的API。

    是的,您需要访问(外部)存储器上的文件。(或者您称之为“USB分区”)添加清单条目是否足够,或者是否需要整个运行时权限限制?对于较新的Android设备(Android 6.0,API级别23)。访问文件系统被认为是一种“危险的权限”,每次都需要检查。啊哈,这就成功了!此外,我从URI收到的路径必须转换为“正确”的路径,但除此之外,它似乎工作正常。如果愿意,您可以将您的评论转换为答案。