EasyRTMP播放视频报错Permission Denial

在预览界面点了录像,到设置-录像文件夹,点播放闪一下,报错

08-20 13:52:36.370 9445-9445/xxx E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xxx, PID: 9445
    java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/xxx/2019_08_20_13_34_38-0.mp4
        at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:712)
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:401)
        at org.easydarwin.easypusher.MediaFilesActivity$LocalFileFragment.onClick(MediaFilesActivity.java:410)
        at android.view.View.performClick(View.java:4457)
        at android.view.View$PerformClick.run(View.java:18496)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5291)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
        at dalvik.system.NativeStart.main(Native Method)

不知道改了什么,没有提示上面的错误了。

2019-08-20 17:33:53.364 16069-16069/? W/Glide: Load failed for content://org.easydarwin.easyrtmp.fileprovider/RecordFolder/2019_08_20_17_15_55-0.mp4 with size [137x137]
    class com.bumptech.glide.load.engine.GlideException: Failed to load resource
    There was 1 cause:
    java.lang.SecurityException(Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{be197a5 16069:com.huawei.himovie/u0a145} (pid=16069, uid=10145) that is not exported from UID 10392)

修改前

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

Uri fileUri = FileProvider.getUriForFile(getContext(), getString(R.string.org_easydarwin_update_authorities), mSubFiles[holder.getAdapterPosition()]);
intent.setDataAndType(fileUri, "video/*");
startActivity(intent);

修改后

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse(path);
Log.i(TAG, uri.toString());
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);

Mate9可以播放,但4X不行,点了没反应。

因为有效的地址是这样path=content://media/external/video/media/8292

实际上path=/storage/emulated/0/EasyRTMP/2019_08_20_19_04_38-0.mp4

但神奇的是Mate9可以播放。

解:加授权

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

完整代码

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

File file = new File(path);
Uri fileUri;
fileUri = FileProvider.getUriForFile(getContext(), getString(R.string.org_easydarwin_update_authorities), file);
Log.i(TAG, fileUri.toString());
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setDataAndType(fileUri, "video/mp4");

参考

Android 7.0 行为变更 通过FileProvider在应用间共享文件吧 - Hongyang - CSDN博客
https://blog.csdn.net/lmj623565791/article/details/72859156

你可能感兴趣的:(EasyRTMP播放视频报错Permission Denial)