首先介绍下背景:文件存在并且路径正常,Android读写权限申请了。
真机路径:
std::string input = "/storage/emulated/0/Download/123.wav;
最开始怀疑文件是否存在,使用assess函数检查文件是否存在,代码如下:
#include <unistd.h>
if(access(input, F_OK) == 0){
LOGI("文件存在");
} else {
LOGI("文件不存在");
}
结果显示“文件存在”。
调用fopen函数打开时,发现异常,这里可以通过errno头文件打印异常日志
LOGI("open fail errno = %d reason = %s \n", errno, strerror(errno));
报错结果:Permission denied。
这是Android对权限的收紧,JNI层无法直接访问SD卡文件,这里解决方法是将文件移动到sd卡沙盒中,沙盒路径:
/storage/emulated/0/Android/data/app包名/files/123.wav
由于只是调试使用,暂时这么解决了。