无法在 Android Studio 中打开外部文件

Can't open external files in Android Studio

提问人:terdev 提问时间:5/30/2023 更新时间:5/30/2023 访问量:123

问:

我想在 Android Studio 中使用 NDK 在 C++ 中打开一个文件。外部存储目录位于 ,因此我使用以下 C++ 代码打开该文件:.npy/storage/emulated/0/

#include <stdio.h>
#include <jni.h>
extern "C" JNIEXPORT jint JNICALL
Java_com_example_demo_MainActivity_getInt( JNIEnv* env, jobject /* this */) {
    std::string fname = "/storage/emulated/0/data.npy";
    FILE* fp = fopen(fname.c_str(), "rb");
    if(!fp) throw std::runtime_error("npy_load: Unable to open file "+fname);
    return 0;
}

我在 中指定了以下外部存储访问权限:AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <!-- more stuff -->
</manifest>

但是,我无法正确读取文件:

terminating with uncaught exception of type std::runtime_error: npy_load: Unable to open file /storage/emulated/0/data.npy

我无法弄清楚为什么这个错误不断发生,因为我对目录有读/写访问权限。

安卓 C++ 工作室 安卓 -NDK

评论

0赞 Richard Critten 5/30/2023
WRITE_EXTERNAL_STORAGE“......如果您的应用是文件管理器,并且需要对外部存储文件进行广泛访问,则系统必须将您的应用列入许可名单...”
0赞 Robert 5/30/2023
权限 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 已弃用,在最新的 Android 版本上,它们完全没有任何影响,因为共享存储访问现在通过作用域存储 Java API 进行。
0赞 blackapps 5/31/2023
该文件显然不是由您的应用程序创建的。谁把它放在那里的?因此无法以这种方式访问。
0赞 blackapps 5/31/2023
@Robert。不对。Android 13 设备上的每个应用都可以在外部存储的所有公共目录中创建文件,而无需该写入权限。
0赞 Robert 5/31/2023
@blackapps 但在这种情况下,terdev 试图在根目录中创建文件,在公共目录中创建文件。如果您知道一个总体答案来解释有关分区存储的所有内容,请随时链接它或编写这样的答案。由于分区存储的变化,有太多的问题,所以最好有一个解释一切的答案,而不是在每个新答案上再次解释相关部分。

答: 暂无答案