gpt4 book ai didi

java - android ndk wrapped c++ file 获取android系统文件路径

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:29 29 4
gpt4 key购买 nike

我有一些由 android JNI 用 c++ 编写的代码。

在一个导出函数中

"extern "C" JNIEXPORT int JNICALL Java_com_android_mymapsforge_create(JNIEnv *env, jobject obj)
{
...

ifstream infile("C:\\Users\\li\\Documents\\Visual Studio 2010\\Projects\\importANN\\Debug\\nodes.csv");
string line;
int index = 0;

while( getline( infile, line ))
{
....
}

}

当我使用那些原始的 c++ 代码时,我在 vs2010 下进行测试。要么我为 infile() 参数分配一个固定的文件路径,要么使用一些 c++ get_file_path 函数,这是一个与 Windows 系统相关的东西,没有问题。两者都有效。

但现在我想在 android 使用的 JNI 下使用这些代码。所以文件路径系统更改为android并且需要调整一些功能。

我的问题出现了:因为代码最终被我的 android java 代码在 android 应用程序下使用,所以“C:\Users\li\Documents\Visual Studio 2010\Projects\importANN\Debug\nodes.csv” , 不再生效,可能会改为“/mnt/sdcard/somefolder/nodes.csv”

但是我有经验,当我在 android 应用程序中给出一个固定的文件路径时,它告诉我一些错误,所以在 android jave envi 下,我使用下面的代码来获取文件路径,类似的代码在这里:

String mpath ;
mpath = Environment.getExternalStorageDirectory().getPath();
mapView.setMapFile(new File(mpath+"/"+"berlin.map"));

(省略文件名,我只想说说我用的方法)

但是这些android代码一定不能用在我的c++包装函数Java_com_android_mymapsforge_create中,

所以我的问题是:

如何处理c++导出函数下的文件(android系统)路径?例如,我将“nodes.csv”放在我的sdcard根文件夹下,想在JNI导出的c++函数下做一些处理?

最佳答案

最简单的方法是将路径作为函数的参数传递。

extern "C" JNIEXPORT int JNICALL Java_com_android_mymapsforge_create(JNIEnv *env, jobject, jstring path)

然后你可以使用 JNI converting jstring to char * 将 jstring 路径转换为 ​​char* .

第二种方法是从 JNI 函数调用 Android Environment.getExternalStorageDirectory().getPath(),如此处所述 - Call a static java method of another package from native code .

关于java - android ndk wrapped c++ file 获取android系统文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533863/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com