gpt4 book ai didi

android - 在 webview 中播放本地视频

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:03 25 4
gpt4 key购买 nike

我想在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com