cur*_*iss 12 video android webview
我想在人行横道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);
}
Run Code Online (Sandbox Code Playgroud)
我也定义了 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
有关stackoverflow要求访问资产的其他问题,所以我创建了这个新问题
小智 3
要在运行 marshmellow 或更高版本的 Android 设备上访问本地文件,您需要在尝试访问文件之前在运行时检查权限。如果你不这样做,它就会破裂
这是一个实现它的教程,特别是读取文件 https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/
根据文件的来源,我建议您不要在播放前检查,而是在入口点之前检查。例如,如果您尝试从图库中选择媒体,或从文件管理器中选择文件,则在创建文件意图选择器之前,您需要检查写入权限,然后按如下所示继续操作
@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
}
}
}
Run Code Online (Sandbox Code Playgroud)
您仍然应该研究该链接,它很容易实现。希望您会发现这有帮助
归档时间: |
|
查看次数: |
1985 次 |
最近记录: |