使用 ChooserIntent 从 OneDrive 下载文件时出现 FileUriExposedException

FileUriExposedException while downloading file from OneDrive with ChooserIntent

我使用 ChooserIntent 将文件添加到我的应用程序。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setType("*/*");
Intent chooserIntent = Intent.createChooser(intent,"Choose file to import";
startActivityForResult(chooserIntent, FILE_REQUEST_CODE);

通常,例如从内部或外部存储中选择文件(例如图片)时,return是 onActivityResult() 中的一个 content:// Uri。这也适用于 DropBox 和大多数其他存储介质,但是当使用 OneDrive 时,它​​ returns 一个 file:// Uri 导致 Android SDK 24+ 中的 FileUriExposedException。

 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=42, result=-1, data=Intent 
   { act=android.intent.action.GET_CONTENT dat=file:///data/user/0/com.microsoft.skydrive/no_backup/stream_cache/myemail@email.com/5761/bewerbung.rtf typ=text/rtf flg=0x1000003 cmp=com.microsoft.skydrive/.intent.getcontent.ReceiveGetContentActivity }}
   to activity {com.android.documentsui/com.android.documentsui.picker.PickActivity}:
   android.os.FileUriExposedException: file:///data/user/0/com.microsoft.skydrive/no_backup/stream_cache/myemail@email.com/5761/bewerbung.rtf exposed beyond app through Intent.getData()

如何制作 OneDrive return 包含 content:// Uri(最好)的文件或避免异常导致我的应用程序崩溃?

很显然,Microsoft 只是没有意识到这个问题,并在我发送支持票后迅速修复了它。大力支持,但他们应该在 api 24.

发布时解决该问题