sa as z主要用到下面的几个库

flutter_downloader: ^1.1.7path_provider: 1.1.2permission_handler: ^3.1.0progress_dialog: ^1.1.0+1

准备步骤:

下载肯定是要先权限配置和权限申请.

1.权限配置.

清单文件配置权限

申请权限 ,加入依赖

permission_handler: ^3.1.0
// 申请权限  Future _checkPermission() async {    // 先对所在平台进行判断    if (Theme.of(context).platform == TargetPlatform.android) {      PermissionStatus permission = await PermissionHandler()          .checkPermissionStatus(PermissionGroup.storage);      if (permission != PermissionStatus.granted) {        Map permissions =            await PermissionHandler()                .requestPermissions([PermissionGroup.storage]);        if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {          return true;        }      } else {        return true;      }    } else {      return true;    }    return false;  }

2.下载目录配置

在 Flutter 里实现文件读写,需要使用 path_provider 和 dart 的 io 模块。path_provider 负责查找 iOS/Android 的目录文件,IO 模块负责对文件进行读写

然后我们创建我们想要保存文件的目录

内外部存储常用目录操作

context.getFilesDir() 内部存储data/data/包名/files目录
context.getCacheDir() 内部存储data/data/包名/cache目录
Environment.getExternalStorageDirectory() 外部存储根目录
Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) 外部存储公有目录
context.getExternalFilesDir() 外部存储私有目录storage/sdcard/Android/data/包名/files。一般存储长时间保存的数据。

使用getApplicationDocumentsDirectory,下载之后生成的文件目录是这样的

/storage/emulated/0/Android/data/com.lyy.flutter_download_demo/files/Download/test.apk

使用getTemporaryDirectory(临时/缓存文件目录,系统可以在清理的时候删除的),生成之后是这样的
/data/user/0/com.lyy.flutter_download_demo/cache/Download/test.apk

这两个目录都是需要root权限才可以看到的.

没有权限

因为我没有root成功,所以我暂时使用外置存储.下载成功之后是这样的目录结构,如果为了让其他app可以访问到你的文件,请放置在 external storage 目录下

/storage/emulated/0/Android/data/com.lyy.flutter_download_demo/files/Download/test.apk

// 获取存储路径  Future _findLocalPath() async {    // 因为Apple没有外置存储,所以第一步我们需要先对所在平台进行判断    // 如果是android,使用getExternalStorageDirectory    // 如果是iOS,使用getApplicationSupportDirectory    final directory = Theme.of(context).platform == TargetPlatform.android        ? await getExternalStorageDirectory()        : await getApplicationSupportDirectory();    return directory.path;  }

3.下载

flutter_downloader库的使用.可以参考文档https://pub.dev/packages/flutter_downloader,ios部分需要自己配置,android需要自己配置fileprovider.

如果使用到filedownload库的下载后打开文件,查看filedownload源代码可以看到,是需要使用到他的peovider的配置的

把下面这段加到清单文件里面去

在initstate里面初始化,

@overridevoid initState() {super.initState();FlutterDownloader.registerCallback(downloadCallback);}

在dispose方法里面销毁掉这个监听

  @override  void dispose() {    FlutterDownloader.registerCallback(null);    super.dispose();  }
  // 执行下载文件的操作_doDownloadOperation() async {  /**   * 下载文件的步骤:   * 1. 获取权限:网络权限、存储权限   * 2. 获取下载路径   * 3. 设置下载回调   */  // 获取权限  var isPermissionReady = await _checkPermission();  if (isPermissionReady) {    // 获取存储路径    var _localPath = (await _findLocalPath() + '/Download');    final savedDir = Directory(_localPath);    // 判断下载路径是否存在    bool hasExisted = await savedDir.exists();    // 不存在就新建路径    if (!hasExisted) {      savedDir.create();    }    // 下载链接    String downloadUrl =        "https://s.beta.myap p.com/myapp/rdmexp/exp/file2/2019/12/17/commegstarboss_1.0.1_d70afe0a-0d88-5323-b0a1-5d438673042c.apk";    // 下载    _downloadFile(downloadUrl, _localPath);  } else {    showToast("您还没有获取权限");  }}
_downloadFile(downloadUrl, savePath) async {  await FlutterDownloader.enqueue(    url: downloadUrl,    savedDir: savePath,    showNotification: true,    // show download progress in status bar (for Android)    openFileFromNotification:        true, // click on notification to opden downloaded file (for Android)  );}
@overrideWidget build(BuildContext context) {  return Scaffold(    appBar: AppBar(      title: Text(widget.title),    ),    body: Center(      child: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: [          /*  Text('getApplicationDocumentsDirectory:' + pathloacal),          Text('getExternalStorageDirectory:' + pathexternal),*/          RaisedButton(            child: Text("点我下载文件"),            onPressed: () {              // 执行下载操作              _doDownloadOperation();            },          ),        ],      ),    ),  );}

android 读写文件权限_flutter 文件下载相关推荐

  1. android 根目录 写文件,android 读写文件、列出根目录文件及新版本权限

    想列出android 内部存储根目录(内部存储也是sd卡形式) File path =Environment.getExternalStorageDirectory(); File[] files=p ...

  2. android 读写文件 简书,Android10 文件操作适配

    最近Android10的手机不断上市,在对其就进行适配过程中发现对文件操作发生错误,问题如下: java.lang.SecurityException: getSubscriberId: The us ...

  3. android 读写文件 简书,Android 中的文件操作

    Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...

  4. android读写文件

    一般要是在PC上建立一个虚拟机,然后用DDMS的file explorer 查看虚拟手机上的文件 但是这个方法运行速度之慢实在是不能忍,一般都是直接用手机调试,在读写文件的时候就有问题了,首先不能读写 ...

  5. android odex文件权限定制

    在做Felica FN认证的时候,遇到一个奇怪的需求:要求生成的odex文件权限是640 刚开始拿到这个问题的时候,还以为是在编译CI里有哪个地方可以配置,查了一下编译相当的mk文件,没有找到,然后查 ...

  6. oracle写java文件_Oracle PL/SQL java读写文件权限问题得到解决

    在ORACLE中PL/SQL利用java读取文件 参考了 的内容,但是出现如下错误: Exception in thread "Root Thread" java.security ...

  7. android请求读写外设权限,android读写文件完整版

    鉴于实现android文件读写的惨痛经历,我决定将其实现过程写下来.其实网站上关于这方面的博客.讨论很多,我也看了很多,但都不太完整(也可能是我没看明白),导致我在这个问题上纠结了足足4天,在完成前1 ...

  8. Android的读写文件权限

    /**测试没通过* 写文件* @param str*/public void write(String str){File file = new File(Environment.getExterna ...

  9. Android 10 读写文件权限

    权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> < ...

最新文章

  1. Linux进阶 vim grep sed awk 正则表达式
  2. 关闭window端口445
  3. shell脚本把昨天的txt打成tar包
  4. 帕金森定律(Parkinson's Law)
  5. java序列化流_java 序列化流与反序列化流
  6. 怎样在linux卸载java,卸载linux自带java,linux自带java
  7. Modown收费资源下载 WordPress 1.7主题+Erphpdown插件
  8. putty xshell远程连接Linux及密钥认证
  9. IHttpHandler给图片加水印
  10. 移动端自适应布局方案尝试
  11. cornerstone 加载dicom图像不同分辨率导致图像被截取的问题。
  12. 上百套HTML5登录页面模板
  13. UVA - 10105 Polynomial Coefficients
  14. 网桥 网卡网桥有什么区别
  15. 大数据时代的变革与顺势而为——读《大数据时代》
  16. 设计模式之简单工厂模式与策略模式
  17. 最新尚硅谷Java MyBatisPlus教程(完整)
  18. matlab画图中颜色渐变
  19. 9700 功耗测试软件,温度与功耗测试 - 酷睿i9-9900K/i7-9700K同步评测:八核的时代来了 - 超能网...
  20. polished css,CSS3网格布局(grid)模板在线构建工具

热门文章

  1. 方法中的参数的五种形式
  2. 开发过程中的常见问题
  3. 【转载】SAP 计划策略组40、50对比分析
  4. 【测试】ABAP发送HTML格式邮件FM
  5. 浅谈ATP检查中的“确认可用部分数量”(二)
  6. HANA数据库为何如此之快
  7. SAP ABAP二分查找(binary search)实际问题的深度分析
  8. POJO和javabean的异同
  9. 不安装Oracle客户端使用PLSQL
  10. 消息转为文本函数('MESSAGE_TEXT_BUILD')