android - 在 webview 中播放本地视频

标签 android video webview

我想在crosswalk webview中播放本地视频。我从打开我的 Activity 的 Intent 中获取视频路径,因此它可以存储在内部或 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 的其他问题要求访问 Assets ,所以我创建了这个新问题

最佳答案

要在运行 marshmellow 或更高版本的 android 设备上访问本地文件,您需要在尝试访问文件之前在运行时检查权限。如果你不这样做,它就会崩溃

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

根据文件的来源,我建议您不要在播放前检查,而是在入口点之前检查。例如,如果您尝试从图库中选择一个媒体,或从文件管理器中选择一个文件,就在您创建文件 Intent 选择器之前,您检查写入权限,然后按如下所示进行操作

    @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
           }
       }
    }

您仍然应该研究链接,它很容易实现。希望你会发现这有帮助

关于android - 在 webview 中播放本地视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658280/

相关文章:

video - ffprobe 获取最后一个音频/视频数据包的 pts

JavaFX 资源处理 : Load HTML files in WebView

webview - 是否可以在混合应用程序中使用 NativeScript 的 WebView 作为 WebMap?

javascript - 如何在 Javascript 中暂停 Vimeo 视频?

Javascript事件监听器在特定时间开始视频并在一定时间后停止视频

java - 使用列表为我的 RecyclerView 制作了一个自定义适配器

android - Json 数据已发布到服务器但始终获取 "com.android.volley.ParseError: org.json.JSONException: End of input at character 0 of"

javascript - Android WebView Javascript 未启用

android - 系统覆盖检测器

java - CountDownTimer——表示用户递增。问题