reb*_*r86 6 android uri android-ndk
我正在开发一个 Android 应用程序,需要将文件发送到 NDK 并对该文件执行一些处理。问题是,在选择文件后,Android(由于权限)返回一个内容 Uri,而 NDK 需要一个真实的(绝对)该文件的路径。
现在的问题是“如何处理 NDK 和 Android java(或 kotlin)源代码之间的这个问题?”
有一些代码可以将内容 uri 转换为真实文件路径,但它们不起作用并返回空字符串。另外,我知道如何在 java(kotlin) 端处理内容 uri。
在科特林中:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在.cpp中:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管 aUri不一定是文件,但在某些情况下我们可以确定它是文件。例如,考虑在 MediaStore 上查询的文件。在这种情况下,您可以使用 ContentResolver 中的方法,例如openFileDescriptor、openAssetFileDescriptor、openTypedAssetFileDescriptor。那些返回对象如AssetFileDescriptoror ParcelFileDescriptor。从返回的对象中,您可以获取打开文件的文件描述符并将其传递到 NDK 级别。例如,取决于ParcelFileDescriptor您拥有getFd()或detachFd()取决于您是否想授予所有权。这适用于 Android 10 上的分区存储。
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |