aedict
aedict copied to clipboard
🐞 FileUriExposedException when exporting a notepad via "SEND TO APPS"
Hi, Martin!
I can export a notepad via Notepad > Export Notepad as CSV
and selecting SAVE TO DISK
,
but I can't when I choose SEND TO APPS
.
When I try SEND TO APPS
it displays:
... and logs:
android.os.FileUriExposedException: file:///storage/emulated/0/output.csv exposed beyond app through ClipData.Item.getUri()
More logs:
07-25 19:04:46.734 9586 9586 I Aedict:Views: Export Anki CSV to: got 16 listeners; alwaysPick=true, forcing showing of the chooser dialog
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: Failed to send exported CSV via Intent
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: android.os.FileUriExposedException: file:///storage/emulated/0/output.csv exposed beyond app through ClipData.Item.getUri()
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.StrictMode.onFileUriExposed(StrictMode.java:1978)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.net.Uri.checkFileUriExposed(Uri.java:2371)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.content.ClipData.prepareToLeaveProcess(ClipData.java:966)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.content.Intent.prepareToLeaveProcess(Intent.java:10902)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.content.Intent.prepareToLeaveProcess(Intent.java:10908)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.content.Intent.prepareToLeaveProcess(Intent.java:10887)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1667)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.Activity.startActivityForResult(Activity.java:4689)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:728)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.Activity.startActivityForResult(Activity.java:4647)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:709)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.Activity.startActivity(Activity.java:5008)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.Activity.startActivity(Activity.java:4976)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at sk.baka.aedict3.util.android.Views.sendTo(Views.java:84)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at sk.baka.aedict3.util.export.Exporter2$ExportToCSVAsyncTask.sendAsIntent(Exporter2.java:560)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at sk.baka.aedict3.util.export.Exporter2$ExportToCSVAsyncTask.onPostExecute(Exporter2.java:510)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at sk.baka.aedict3.util.export.Exporter2$ExportToCSVAsyncTask.onPostExecute(Exporter2.java:406)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.AsyncTask.finish(AsyncTask.java:695)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.AsyncTask.access$600(AsyncTask.java:180)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.Handler.dispatchMessage(Handler.java:106)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.os.Looper.loop(Looper.java:214)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at android.app.ActivityThread.main(ActivityThread.java:7073)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at java.lang.reflect.Method.invoke(Native Method)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
07-25 19:04:46.741 9586 9586 E Aedict:Exporter2: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
07-25 19:04:46.742 5463 5529 D WindowManager: reportFocusChangedSerialized, focused=false, inTouchMode=true, win=Window{e67b05a u0 sk.baka.aedict3/sk.baka.aedict3.NotepadActivity EXITING}
Device: Samsung Note8, Android 9, One UI 1.0 Aedict 3.51.6
According to ChatGPT and Gemini:
Starting from Android 7.0 (API level 24), sharing file URIs across app boundaries using intents has been restricted to improve security. To resolve this issue, you should use a
content://
URI instead of afile://
URI. You can achieve this by using a FileProvider.
If you need more information, please let me know.
Thank you!