无法从内部存储中打开文件。安卓 7.1 中的代码崩溃



以下代码适用于Android 5,6。但它在Android 7.1

上崩溃
Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(""));
        intent1.setDataAndType(Uri.parse("file:///" + "sdcard/path/"+fName), "application/pdf");
        startActivity(intent1);

logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.amey.newunipunebuddy, PID: 19574
              android.os.FileUriExposedException: file:///sdcard/unipunebuddy_data/timetables/Timetable.pdf exposed beyond app through Intent.getData()
                  at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
                  at android.net.Uri.checkFileUriExposed(Uri.java:2346)
                  at android.content.Intent.prepareToLeaveProcess(Intent.java:9022)
                  at android.content.Intent.prepareToLeaveProcess(Intent.java:8983)
                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1519)
                  at android.app.Activity.startActivityForResult(Activity.java:4225)
                  at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                  at android.app.Activity.startActivityForResult(Activity.java:4183)
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:856)
                  at android.app.Activity.startActivity(Activity.java:4522)
                  at android.app.Activity.startActivity(Activity.java:4490)
                  at com.amey.newunipunebuddy.Timetable$DownloadTask.onPostExecute(Timetable.java:498)
                  at com.amey.newunipunebuddy.Timetable$DownloadTask.onPostExecute(Timetable.java:415)
                  at android.os.AsyncTask.finish(AsyncTask.java:660)
                  at android.os.AsyncTask.-wrap1(AsyncTask.java)
                  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6145)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

w/dynamiteModule:com.google.firebase.firebase.auth找不到的本地模块描述符类。申请终止。

从android 6.0开始,您需要提示用户以获取许可以写入外部存储(submisest.permission.write.write_external_storage)-https://developer..android.com/training.com/training/pernaining/permissions/permissions/requesting。

外部存储上的Google文档

您必须使用getExternalFilesDir()。查看其他选项的链接(图片,音乐,...)

还检查您的权限,我不记得什么时候,但是现在Android要求您在App Startup中验证权限。也许它与不同的系统链接。(5,6,...)

 FileUriExposedException

您将文件的URI暴露于外界。牛轧糖不允许您再做任何事情。

使用文件提供商或文件内容提供商服务文件。

最新更新