У меня есть CSV-файл, хранящийся во внутреннем хранилище, в папке Download на устройстве Android. Я хотел бы прикрепить этот файл и отправить его по электронной почте с намерением. Тем не менее, приложение продолжает закрывать себя. Ниже приведен код:
File myDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
String myFileName = "FileName.csv";
Intent i = new Intent(android.content.Intent.ACTION_SEND);
i.setType("application/csv");
i.putExtra(android.content.Intent.EXTRA_EMAIL, "");
i.putExtra(Intent.EXTRA_SUBJECT, "");
i.putExtra(Intent.EXTRA_TEXT, "");
File F = new File(myDir+"/"+myFileName);
Uri U = Uri.fromFile(F);
i.putExtra(Intent.EXTRA_STREAM, U);
startActivity(Intent.createChooser(i, "Send Mail"));
У меня есть следующие разрешения на использование в манифесте:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Ниже приведены ошибки, напечатанные в logcat:
2020-02-07 17:17:00.850 7501-7501/com.example.mydata E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mydata, PID: 7501
android.os.FileUriExposedException: file:///storage/emulated/0/Download/FileName.csv exposed beyond app through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2083)
at android.net.Uri.checkFileUriExposed(Uri.java:2388)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:977)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10759)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10765)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10744)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1703)
at android.app.Activity.startActivityForResult(Activity.java:5192)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.app.Activity.startActivityForResult(Activity.java:5150)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
at android.app.Activity.startActivity(Activity.java:5521)
at android.app.Activity.startActivity(Activity.java:5489)
at com.example.mydata.MainActivity.onNavigationItemSelected(MainActivity.java:82)
at com.google.android.material.navigation.NavigationView$1.onMenuItemSelected(NavigationView.java:170)
at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
at androidx.appcompat.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:90)
at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
at com.google.android.material.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:352)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-02-07 17:17:00.870 7501-7501/com.example.mydata I/Process: Sending signal. PID: 7501 SIG: 9
Любая помощь на это, пожалуйста