我有一个小项目,要求读取android手机存储卡里面的文件,不用考虑安全问题。
已经在manifest.json中配置了以下权限:
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
我使用的方法是通过js来调用android的原生api,大概代码如下:
listDir(javaFile) {
this.curPath = plus.android.invoke(javaFile, 'getAbsolutePath')
const files = plus.android.invoke(javaFile, 'listFiles')
if (files && files.length) {
this.curFiles = files.map(f => ({
name: plus.android.invoke(f, 'getName'),
type: plus.android.invoke(f, 'isDirectory') ? 'dir' : 'file'
}))
} else {
this.curFiles = []
}
}
也加入了授权方法:
openPermission() {
const permissions = ['android.permission.READ_EXTERNAL_STORAGE',
'android.permission.WRITE_EXTERNAL_STORAGE']
plus.android.requestPermissions(permissions, e => {
console.log('permission done', JSON.stringify(e))
if (e.granted.length == 2) {
plus.nativeUI.toast('授权成功')
this.reloadDir()
}
})
}
在使用标准基座运行时,一切都正常,可以访问目录,也可以访问目录下面的文件,还可以创建目录和写文件。
但是,当使用自定义基座运行,或者打包后,就只能访问目录,和访问一些.jpg之类的媒体文件,不能访问其它普通文件,如txt,pdf文件,也不能创建目录,也不能写文件。
想请教一下各位大神,是否是uniapp在这方便做了限制,还是我的方法不对。
有没有办法做到,在打包之后,可以读取任意文件,并且可以写文件?
附件是显示手机存储卡目录和文件列表的简单功能,可以用标准基座和自定义基座运行来比较效果的不同。
s***@qq.com (作者)
谢谢了。原来操作文件变得这么麻烦了,看来得调整一下需求才行。
另外,也建议官方处理一下标准基座的权限,不然容易被误导。
2023-03-26 11:14