У меня есть собственная реализация JNI, и сейчас у меня есть медиа-файлы в каталоге приложения /storage/emulated/0/Android/data/com.my_app.debug/files/Models/my_media_file.mp4
, чтобы начать читать один из файлов, мне нужно передать путь к JNI
, где внутри я использую такой метод, который ожидает получить path_to_mp4_file
bool Decoder::InitFromFile(std::string const &filename)
{
m_file.open(filename, std::ios::binary);
if (!m_file.is_open())
{
return false;
}
...
}
И все работает, но теперь мне нужно прочитать из папки build-in
raw
, так что теперь, чтобы получить путь к моему файлу, я использую этот способ
fun foo()
{
...
val path = "android.resource://" + activity!!.packageName + "/" + R.raw.my_media_file
val uri = Uri.parse(path)
JNIImplementation.InitFromFile(uri.path)
...
}
Но теперь uri = android.resource://com.my_app.debug/2131492865
, если я получу uri.path = /2131492865
.
Проблема в том, что если я передам этот uri.path
как путь к методу InitFromFile
, я получу ошибку, потому что я не могу открыть файл по пути /2131492865
.
Итак, насколько я понимаю, должен быть способ чтения из папки raw or assert
собственным способом или что-то подобное
Как сделать это?
Или, может быть, есть способ, как поместить этот файл мультимедиа в приложение (build-in
) и получить доступ к пути к обычному файлу? Я имею в виду как-то смотреть на этот файл не как ресурс, а как простой файл?