我是 android 和 JNI 的新手。我想访问设备中的文件。我已经向 list 添加了权限,但它不起作用。
Java 代码:
public class MainActivity extends ActionBarActivity {
public native String setFilePath(String path);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = new TextView(this);
tv.setText( "1111" );
setContentView(tv);
String path = Environment.getExternalStorageDirectory().getPath()+"/xyz";
Log.i("java ", path);
setFilePath(path);
}
}
C 代码:
jint Java_package_MainActivity_setFilePath(JNIEnv* env, jobject this,jstring Path){
path = (*env)->GetStringUTFChars( env, Path , NULL ) ;
__android_log_print(ANDROID_LOG_DEBUG, "SO", "fopen(%s)", path);
FILE* file = fopen(path,"ab+");
(*env)->ReleaseStringUTFChars( env, Path , path );
fputs("Testing!\n", file);
fclose(file);
return 0;
}
出现错误:
Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 16152
最佳答案
// Path is an jstring passed as an arg of a function
char *path = (*env)->GetStringUTFChars( env, Path , NULL ) ;
__android_log_print(ANDROID_LOG_DEBUG, "SO", "fopen(%s)", path);
FILE* file = fopen(path,"ab+");
(*env)->ReleaseStringUTFChars( env, Path , path );
fputs("Testing!\n", file);
fclose(file);
如果不起作用,请将打印内容发布到 logcat。
关于java - 文件操作JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922525/