小编Fon*_*ons的帖子

Android WebView不允许加载本地视频文件

我有一个带有WebView的应用程序,显示一个HTML文件.在HTML文件中,有一个按钮,用于请求用户录制视频,或从文档文件夹中选择视频.

在选择(或录制)视频时,它会将带有链接(由Uri编码)的javascript函数调用到视频文件,然后将其设置为元素,方法是将其设置为源:

function showPreview(previewFile){
    console.log(previewFile);
    document.getElementById('previewVideo').src = previewFile;
}
Run Code Online (Sandbox Code Playgroud)

我遇到了这个错误,我一直在寻找,但似乎无法找到解决方案:

I/chromium? [INFO:CONSOLE(94)] "content://com.android.providers.media.documents/document/video%3A19961", source: file:///android_asset/index.html (94)
W/MediaResourceGetter? permission denied to access network state
W/MediaResourceGetter? non-file URI can't be read due to unsuitable network conditions
E/MediaResourceGetter? Unable to configure metadata extractor
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在我的javascript函数中记录视频文件的链接,您可以告诉链接content://com.android.providers.media.documents/document/video%3A19961.

这就是我在我的代码中加载WebView的方式(当然在XML中有相应的WebView):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView = (WebView) this.findViewById(R.id.webView);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAllowFileAccessFromFileURLs(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient());
    webView.addJavascriptInterface(new CSJSInterface(getApplicationContext()), "jsInterface");
    webView.loadUrl("file:///android_asset/index.html");
}
Run Code Online (Sandbox Code Playgroud)

Javascript接口函数和回调

 @JavascriptInterface
 public void showCapture() {
     File imageStorageDir = new File(
             Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
             , CS_MOVIE_DIRECTORY); …
Run Code Online (Sandbox Code Playgroud)

javascript video android webview android-contentprovider

5
推荐指数
1
解决办法
3726
查看次数