问题描述
我正在尝试编写一个需要在文件系统(基于目录的音乐播放器)中导航的应用程序。为此,我正在使用 react-native-fs。问题是我可以读取 /storage 目录的内容,但是当我尝试读取更深的内容时,例如 /storage/emulated 或 SD 卡的内容,应用程序向我显示一个错误 - [Error: Attempt to获取空数组的长度].
当我检查权限时,内置功能和应用程序设置都显示我已获得权限。 android模拟器和真机都出现这个问题。
任何想法我做错了什么或如何绕过这个问题?
这是我的安卓清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.filesys">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application ...
这就是我的代码:
import { View,Text,StyleSheet,PermissionsAndroid,Alert,Button } from 'react-native';
import * as RNFS from 'react-native-fs';
const requestPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,{
'title': 'Read External Storage Permission','message': 'The App needs access to your external storage '
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
Alert.alert("Read external storage permission granted.");
}
else {
Alert.alert("Read external storage permission not granded");
}
}
catch (err) {
console.log(err)
}
}
const checkPermission = () => {
PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
.then(result => console.log(result))
.catch(err => console.log(err));
}
const showFiles = (path) => {
RNFS.readDir(path)
.then(files => {
console.log('files:')
files.forEach(file => console.log(file))
})
.catch(err => console.log(err));
}
export default class Main extends Component {
async componentDidMount() {
await requestPermission()
}
render() {
return (
<View style={styles.container} >
<Text>show files app</Text>
<Button title='check permission' onPress={checkPermission}/>
<Button title='show storage files' onPress={() => showFiles('/storage')}/>
<Button title='show storage/amulated files' onPress={() => showFiles('/storage/emulated')}/>
</View>
);
}
}
const styles = StyleSheet.create(
{
container: {
flex: 1,justifyContent: 'center',alignItems: 'center'
},});
日志文件:
LOG {"ctime": null,"isDirectory": [Function isDirectory],"isFile": [Function isFile],"mtime": 2021-03-21T21:02:49.000Z,“名称”:“0123-4567”,“路径”:“/storage/0123-4567”,“大小”:131072}
LOG {"ctime": null,"mtime": 2021-03-21T21:01:52.000Z,"name": "emulated","path": "/storage/emulated","size": 4096}
LOG {"ctime": null,"mtime": 2021-03-21T20:54:25.000Z,"name": "sdcard0","path": "/storage/sdcard0","size": 4096}
LOG {"ctime": null,"name": "self","path": "/storage/self","size": 60}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)