如何允许 Webview 使用 Android 视频播放器应用程序访问在线视频?
How to Allow Webview Accessing Online Video Using Android Video Player Application?
所以,我有一个带有链接视频的网络服务器,我可以访问我的网络视图,我可以使用 HTML5 播放器播放视频,但问题是,视频必须由安装在我的 phone 上的视频播放器应用程序播放...
我该如何实现?
我试过搜索,人们似乎喜欢使用 Youtube 视频播放器或 HTML5 播放器,而不是使用他们的视频播放器应用程序,所以我一无所获...
更新
所以,在我尝试实施 @EricHo
建议的方法之后
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("mp4")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
startActivity(intent);
return true;
}
return false;
}
});
我得到的是,播放视频的播放器是 Chrome 内置的播放器,而不是 Android 视频播放器本身 Photo 1, besides what I expect is The video will be played by gallery instead of Chrome player
如有必要,这是我的index.html源代码
<!DOCTYPE HTML>
<!DOCTYPE html>
<html>
<head>
<title>video</title>
<script type="text/javascript" src="src.js"></script>
<link rel="stylesheet" type="text/css" href="src.css">
</head>
<body bgcolor="#333">
<center>
<video controls preload="metadata" style=" width:px; height:px;">
<source src="video-url" type="video/mp4">
</video><br />
</body>
</html>
一种方法是拦截来自 Webview 的 HTTP 请求。 refer to this
然后检查请求 URL 是否是视频 url。如果是,使用 Intent
打开 url
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoPath), "video/mp4");
startActivity(intent);
编辑:
下面是我的工作示例,当您单击以 "mp4" 结尾的 link 时,android 将使用默认媒体播放器打开 url。
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
println("shouldOverrideUrlLoading")
println(request?.url.toString())
val url :String = request?.url.toString()
if (url.endsWith("mp4")) {
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.parse(url), "video/mp4")
startActivity(intent)
return true
}
return false
}
}
val videoPath = "http://techslides.com/sample-webm-ogg-and-mp4-video-files-for-html5"
webView.loadUrl(videoPath)
Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ecl.webtest">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我可能是错的,但您的默认 android 播放器会播放下载到您 phone 上的 tmp 文件夹或其他文件夹中的视频。您似乎可以使用 html 视频控件在您的页面上播放 linked 视频,但它不会用您的 android 播放器播放,因为它没有被下载并被识别为视频文件。您可以在页面上创建一个 hyperlink,将视频的 link 作为 url,让我们看看默认播放器是否会播放它
所以,我有一个带有链接视频的网络服务器,我可以访问我的网络视图,我可以使用 HTML5 播放器播放视频,但问题是,视频必须由安装在我的 phone 上的视频播放器应用程序播放... 我该如何实现?
我试过搜索,人们似乎喜欢使用 Youtube 视频播放器或 HTML5 播放器,而不是使用他们的视频播放器应用程序,所以我一无所获...
更新
所以,在我尝试实施 @EricHo
建议的方法之后webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("mp4")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
startActivity(intent);
return true;
}
return false;
}
});
我得到的是,播放视频的播放器是 Chrome 内置的播放器,而不是 Android 视频播放器本身 Photo 1, besides what I expect is The video will be played by gallery instead of Chrome player
如有必要,这是我的index.html源代码
<!DOCTYPE HTML>
<!DOCTYPE html>
<html>
<head>
<title>video</title>
<script type="text/javascript" src="src.js"></script>
<link rel="stylesheet" type="text/css" href="src.css">
</head>
<body bgcolor="#333">
<center>
<video controls preload="metadata" style=" width:px; height:px;">
<source src="video-url" type="video/mp4">
</video><br />
</body>
</html>
一种方法是拦截来自 Webview 的 HTTP 请求。 refer to this
然后检查请求 URL 是否是视频 url。如果是,使用 Intent
打开 urlIntent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoPath), "video/mp4");
startActivity(intent);
编辑: 下面是我的工作示例,当您单击以 "mp4" 结尾的 link 时,android 将使用默认媒体播放器打开 url。
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
println("shouldOverrideUrlLoading")
println(request?.url.toString())
val url :String = request?.url.toString()
if (url.endsWith("mp4")) {
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.parse(url), "video/mp4")
startActivity(intent)
return true
}
return false
}
}
val videoPath = "http://techslides.com/sample-webm-ogg-and-mp4-video-files-for-html5"
webView.loadUrl(videoPath)
Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ecl.webtest">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我可能是错的,但您的默认 android 播放器会播放下载到您 phone 上的 tmp 文件夹或其他文件夹中的视频。您似乎可以使用 html 视频控件在您的页面上播放 linked 视频,但它不会用您的 android 播放器播放,因为它没有被下载并被识别为视频文件。您可以在页面上创建一个 hyperlink,将视频的 link 作为 url,让我们看看默认播放器是否会播放它