Как мне разобраться с контентом uri в ndk? - PullRequest
0 голосов
/ 07 июля 2019

Я работаю над приложением для 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...