在webview中播放本地视频

时间:2016-04-15 23:15:32

标签: android video webview

我想在人行横道网页视频中播放本地视频。我正在从打开我的活动的意图中获取视频路径,因此它可以存储在内部或存储在SD卡上。

使用此网址file:///storage/emulated/0/Download/movies/movie.mp4我获得Failed to load resource: net::ERR_ACCESS_DENIED

使用URL.createObjectURL(file);的输入文件对话框可以正常工作。但因为我知道路径,我不想再手动选择它。禁止设置输入文件的值。

使用路径创建URL也是不可能的,因为它需要文件或blob。

由于可能存在大文件大小,因此无法暂时将其复制到SD卡。

这给我找不到文件错误:

@Override
    public WebResourceResponse shouldInterceptLoadRequest(XWalkView view,
                                                          String url) {
        if(url.contains("file:///storage")){
            try {
                return new WebResourceResponse("video/*", "UTF-8", new FileInputStream(url));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
            return super.shouldInterceptLoadRequest(view, url);
    }

我也定义了<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

关于stackoverflow要求访问资产的其他问题,所以我创建了这个新问题

2 个答案:

答案 0 :(得分:3)

要在运行marshmellow或更高版本的Android设备上访问本地文件,您需要在尝试访问该文件之前在运行时检查权限。如果你没有,它就会破坏

这是一个实现它的教程,特别是文件读取 https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/

根据文件的来源,我建议你不要在播放之前检查,而是在入口点之前检查。例如,如果您在创建文件意图选择器之前尝试从gallary或文件管理器中的文件中选择媒体,则检查写入权限,然后按照下面的说明继续操作

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == EXTERNAL_STORAGE_PERMISSION_CONSTANT) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
               //The External Storage Write Permission is granted to you... Continue your left job...
               proceedAfterPermission();
           } else {
               //request again for permission or assume permission denied and alert the user
           }
       }
    }

你仍然应该研究这个链接,它很容易实现。希望您能找到这个有用的

答案 1 :(得分:3)

问题可能在于从外部存储访问视频文件时也要确保您已获得读/写运行时权限。 您可以在此处找到解决方案herethis