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

标签 java android c++ android-ndk filesystems

我有一些由 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/

相关文章:

c++ - 如何在C++中实现动态元素容器

c++ - "uses of target_link_libraries must be either all-keyword or all-plain"

java - 将threadpoolexecutor传递给CompletableFuture有哪些方式?

java - 从 SQlite 检索字符串并转换为 SQL 日期

android - 如何将 HTML5 视频嵌入到 web View 中

android - Android 上的 Chrome 不会将图像缩放到屏幕

android - 如何从 PreferenceActivity 外部更改首选项的状态?

c++ - 如何在这里创建一个循环? C++

java - 使用 IntelliJ IDEA 找不到文件异常

java - Hibernate 5.0.6配置异常: The application must supply JDBC connections