我们如何获得flutter应用程序访问storage/emulated/0/Android/data文件夹的权限?

Abi*_*rge 5 file permission-denied dart flutter

我正在使用 flutter 编写视频播放器应用程序。我正在递归地尝试遍历每个文件夹以获取所有文件->然后创建视频文件的独占列表->然后构建所有视频​​文件的列表视图。

但编译器无法迭代并进入“storage/emulated/0/Android/data”文件夹,因此会抛出“权限被拒绝”错误。

我怎样才能跳过此类无法访问的文件夹/文件并继续迭代,或者如何获得访问此类文件夹的权限(存储/模拟/0/Android/数据)?

我期待获得手机上所有文件的列表。

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:mark_player/custom%20widgets/app_bar.dart';


class newHomeScreen extends StatefulWidget {
  const newHomeScreen({ Key? key }) : super(key: key);

  @override
  State<newHomeScreen> createState() => _newHomeScreenState();
}

class _newHomeScreenState extends State<newHomeScreen> {

  Directory dir = Directory('/storage/emulated/0');

@override
  void initState() {

   List <FileSystemEntity> filesBaby = dir.listSync(recursive: true);
   filesKittan(filesBaby);
    super.initState();
  }

  filesKittan(List <FileSystemEntity> files){
    for (var i = 0; i < files.length; i++) {
      if (files[i].absolute.toString()=='/storage/emulated/0/Android/data') {
        continue;
    }print(files[i].absolute);
  }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold();
  }
}
Run Code Online (Sandbox Code Playgroud)

Oma*_*att 0

您可以使用permission_handler插件来请求存储权限。

// Request storage permission and check if granted
if (await Permission.storage.request().isGranted) {
  // Either the permission was already granted before or the user just granted it.
  // Access path
} 
Run Code Online (Sandbox Code Playgroud)