отправить вложение файла, хранящееся во внутренней памяти - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть 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

Любая помощь на это, пожалуйста

...