android 读写文件权限_flutter 文件下载
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权限才可以看到的.
![](/assets/blank.gif)
没有权限
因为我没有root成功,所以我暂时使用外置存储.下载成功之后是这样的目录结构,如果为了让其他app可以访问到你的文件,请放置在 external storage 目录下
/storage/emulated/0/Android/data/com.lyy.flutter_download_demo/files/Download/test.apk
![](/assets/blank.gif)
// 获取存储路径 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的配置的
![](/assets/blank.gif)
把下面这段加到清单文件里面去
在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(); }, ), ], ), ), );}
![](/assets/blank.gif)
![](/assets/blank.gif)
android 读写文件权限_flutter 文件下载相关推荐
- android 根目录 写文件,android 读写文件、列出根目录文件及新版本权限
想列出android 内部存储根目录(内部存储也是sd卡形式) File path =Environment.getExternalStorageDirectory(); File[] files=p ...
- android 读写文件 简书,Android10 文件操作适配
最近Android10的手机不断上市,在对其就进行适配过程中发现对文件操作发生错误,问题如下: java.lang.SecurityException: getSubscriberId: The us ...
- android 读写文件 简书,Android 中的文件操作
Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...
- android读写文件
一般要是在PC上建立一个虚拟机,然后用DDMS的file explorer 查看虚拟手机上的文件 但是这个方法运行速度之慢实在是不能忍,一般都是直接用手机调试,在读写文件的时候就有问题了,首先不能读写 ...
- android odex文件权限定制
在做Felica FN认证的时候,遇到一个奇怪的需求:要求生成的odex文件权限是640 刚开始拿到这个问题的时候,还以为是在编译CI里有哪个地方可以配置,查了一下编译相当的mk文件,没有找到,然后查 ...
- oracle写java文件_Oracle PL/SQL java读写文件权限问题得到解决
在ORACLE中PL/SQL利用java读取文件 参考了 的内容,但是出现如下错误: Exception in thread "Root Thread" java.security ...
- android请求读写外设权限,android读写文件完整版
鉴于实现android文件读写的惨痛经历,我决定将其实现过程写下来.其实网站上关于这方面的博客.讨论很多,我也看了很多,但都不太完整(也可能是我没看明白),导致我在这个问题上纠结了足足4天,在完成前1 ...
- Android的读写文件权限
/**测试没通过* 写文件* @param str*/public void write(String str){File file = new File(Environment.getExterna ...
- Android 10 读写文件权限
权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> < ...
最新文章
- Linux进阶 vim grep sed awk 正则表达式
- 关闭window端口445
- shell脚本把昨天的txt打成tar包
- 帕金森定律(Parkinson's Law)
- java序列化流_java 序列化流与反序列化流
- 怎样在linux卸载java,卸载linux自带java,linux自带java
- Modown收费资源下载 WordPress 1.7主题+Erphpdown插件
- putty xshell远程连接Linux及密钥认证
- IHttpHandler给图片加水印
- 移动端自适应布局方案尝试
- cornerstone 加载dicom图像不同分辨率导致图像被截取的问题。
- 上百套HTML5登录页面模板
- UVA - 10105 Polynomial Coefficients
- 网桥 网卡网桥有什么区别
- 大数据时代的变革与顺势而为——读《大数据时代》
- 设计模式之简单工厂模式与策略模式
- 最新尚硅谷Java MyBatisPlus教程(完整)
- matlab画图中颜色渐变
- 9700 功耗测试软件,温度与功耗测试 - 酷睿i9-9900K/i7-9700K同步评测:八核的时代来了 - 超能网...
- polished css,CSS3网格布局(grid)模板在线构建工具