preloader
軟體工程

成功用 flutter 製作的 android app 分享檔案(例如,副檔名.tar)到其他 app(Dropbox, GoogleDrive)

以下是我使用 Flutter 開發 Android app 中遇到的疑惑

問題:請問有人成功用 flutter 製作的 android app 分享檔案(例如,副檔名.tar)到其他 app(Dropbox, GoogleDrive)

 

我在 android 8 測試我的 app 分享檔案(xxx.tar)到 Dropbox和 Google Drive 都無法成功上傳, vscode會有以下錯誤訊息:

E/BpSurfaceComposerClient(28844): Failed to transact (-1)  
E/BpSurfaceComposerClient(28844): Failed to transact (-1)  
W/RenderThread(28844): type=1400 audit(0.0:2322505): avc: denied { read } for name="perf_ioctl" dev="proc" ino=4026533703 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u: object_r:proc: s0 tclass=file permissive=0

已給 Android app 儲存權限: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE,
但是 runtime 沒跳出對話框提示使用者要給權限,使用者已在系統設定允許儲存權限

 

解決方法:

我後來用 path_provider plugin 的 getExternalStorageDirectory() API(僅適用Android) 去產生檔案,寫在我的 Android 應用程式外面的目錄,就能分享到手機上已安裝且已登入的 Dropbox app 裡。 提醒:不能使用先產生在應用程式裡面,再搬到/複製到應用程式外面的路徑, Dart 會回應說不同檔案系統看不到搬移目標的路徑(OS Error: [Errno18] Invalid cross-device link)

 

Ref. link:

https://stackoverflow.com/questions/42392600/oserror-errno-18-invalid-cross-device-link