【发布时间】:2014-05-14 11:20:54
【问题描述】:
我在 Android 应用中通过 JNI 调用 C 代码。
调用时一切正常,但是当我输入这段代码时:
FILE* fp = fopen("/storage/sdcard0/input.txt","w+");
if(fp==NULL)
return(*env)->NewStringUTF(env,"n");
else
return(*env)->NewStringUTF(env,"y");
它得到“n”。我确定路径是真的,我在我的手机终端上尝试了这个命令:
cat /storage/sdcard0/input.txt
它给了我文件的内容。
编辑:
我尝试通过此代码更改文件的权限,但它给了我相同的响应:
void changePerm()
{
Process chperm;
try {
chperm=Runtime.getRuntime().exec("su");
DataOutputStream os =
new DataOutputStream(chperm.getOutputStream());
os.writeBytes("chmod 777 /storage/sdcard0/input.txt\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
chperm.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我也添加了这个权限,没有任何改变:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
【问题讨论】:
-
您是否尝试过分解您的陈述以查看哪一行造成了问题?
-
您查看权限了吗?是什么让您认为您的应用有权从外部存储的根目录读取/写入?
-
@Al-mo 没有必要这样做,因为我知道发生了什么。 fopen() 返回空值。我想知道为什么?
-
@Erik 我没有调查权限。但是当您添加需要权限的代码时,程序停止不为空。我说的对吗?
-
不是真的...这取决于您的文件所在的位置。如果它位于公共区域或其中一个应用程序文件夹中,应该没问题。我建议你在这里阅读外部存储:developer.android.com/guide/topics/data/…
标签: android c++ c android-ndk java-native-interface