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權限才可以看到的.
沒有權限
因為我沒有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 文件下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高一数学集合知识点整理_高一数学 | 高
- 下一篇: 倒计时几秒_和平精英:倒计时0秒时进圈会