Я работаю над приложением для Android, которому нужно отправить файл в NDK и выполнить некоторые процессы над этим файлом. Проблема в том, что после выбора файла Android (из-за разрешений) возвращает Uri контента, в то время как NDK нужен реальный (абсолютный) путь к этому файлу.
Теперь возникает вопрос: «Как я могу решить эту проблему между исходным кодом Java (или kotlin) Java и NDK для Android?»
Существуют некоторые коды для преобразования содержимого URI в реальный путь к файлу, но они не работают и возвращают пустую строку. Кроме того, я знаю, как работать с контентом URI на стороне Java (Kotlin).
в котлине:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_WRITE_FILE_TXT && resultCode == Activity.RESULT_OK) {
data?.let {
doProcess(it.data.toString()) // data is Uri and this method is native method
}
}
}
в кпп:
extern "C" JNIEXPORT jint JNICALL
Java_org_my_apps_cpptest_MainActivity_doProcess(
JNIEnv *env,
jobject /* this */,
jstring file) {
//content uri not working, needs a real path
std::string rfn = env->GetStringUTFChars(file, nullptr);
std::ifstream is(rfn, std::ios::in);
if(is.is_open()){
// processing ...
is.close();
return 0;
}
return -1;
}