我在安卓中访问文本文件,但权限被拒绝的errno13出现,我已经给了所有的存储权限
这是显示的logcat错误

应用权限代码

发布于 2021-07-06 22:07:45
从API level 29开始,即使你的应用程序拥有READ_EXTERNAL_STORAGE权限,安卓也会有一个scoped storage policy来阻止直接访问外部存储。相反,您可以使用system file picker,并将文件作为字节数组传递给Python:
val REQUEST_OPEN = 0
fun myMethod() {
startActivityForResult(
Intent(if (Build.VERSION.SDK_INT >= 19) Intent.ACTION_OPEN_DOCUMENT
else Intent.ACTION_GET_CONTENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
setType("*/*")
}, REQUEST_OPEN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_OPEN && resultCode == RESULT_OK) {
val uri = data!!.data!!
// For Java, see https://stackoverflow.com/a/10297073
val content = contentResolver.openInputStream(uri)!!.use { it.readBytes() }
myPythonModule.callAttr("process", content)
}
}然后,Python函数可以随心所欲地访问文件内容:
def process(content):
# `content` is already a bytes-like object, but if you need a standard bytes object:
content = bytes(content)
# If you need a file-like object:
import io
content_file = io.BytesIO(content)
# If you need a filename (less efficient):
import tempfile
with tempfile.NamedTemporaryFile() as temp_file:
temp_file.write(content)
filename = temp_file.name # Valid only inside the `with` block.发布于 2021-07-06 14:29:46
除了在程序的初始运行期间获得这些权限(READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE)之外,还必须将以下代码添加到标记中的AndroidManifest.xml文件中。
android: requestLegacyExternalStorage = "true"https://stackoverflow.com/questions/68265019
复制相似问题