我尝试播放HTML5视频,并在机器人的WebView的YouTube视频,但无法显示视频在Android的WebView屏幕。并播放该视频。
我已经用低于code片段...
布局xml文件的命名:的test.xml包含以下code snipet:
< XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT机器人:ID =@ + ID / rltvLayoutTest
机器人:layout_height =FILL_PARENT>
<的WebView机器人:ID =@ + ID / webViewTest机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT/>
< / LinearLayout中>
和活动课的名字:Test.java包含code如下:
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.test);
的WebView mWebView =(web视图)findViewById(R.id.webViewTest);
mWebView.getSettings()setJavaScriptEnabled(真)。
。mWebView.getSettings()setAllowFileAccess(真正的);
mWebView.getSettings()setPluginsEnabled(真)。
mWebView.setWebChromeClient(新chromeClient());
mWebView.setWebViewClient(新WebViewClient(){
});
mWebView.loadUrl(http://broken-links.com/tests/video/);
}
公共类chromeClient扩展WebChromeClient实现OnCompletionListener,OnErrorListener {
私人的WebView WV;
私人VideoView mVideoView;
私人的LinearLayout mContentView;
私人的FrameLayout mCustomViewContainer;
私人WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =新FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT,Gravity.CENTER);
@覆盖
公共无效onShowCustomView(查看视图,CustomViewCallback回调){
如果(查看的instanceof的FrameLayout){
WV =(web视图)findViewById(R.id.webViewTest);
mCustomViewContainer =(的FrameLayout)视图;
mCustomViewCallback =回调;
mContentView =(的LinearLayout)findViewById(R.id.rltvLayoutTest);
如果(mCustomViewContainer.getFocusedChild()的instanceof VideoView){
mVideoView =(VideoView)mCustomViewContainer.getFocusedChild();
// frame.removeView(视频)
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
的setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(本);
mVideoView.setOnErrorListener(本);
mVideoView.start();
}
}
}
公共无效onHideCustomView(){
如果(mVideoView == NULL)
返回;
//隐藏的自定义视图。
mVideoView.setVisibility(View.GONE);
//将其从容器中的自定义视图。
mCustomViewContainer.removeView(mVideoView);
mVideoView = NULL;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
//显示的内容视图。
mContentView.setVisibility(View.VISIBLE);
}
公共无效onCompletion(MediaPlayer的MP){
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
的setContentView(mContentView);
}
公共布尔的onError(MediaPlayer的为arg0,诠释ARG1,ARG2 INT){
的setContentView(mContentView);
返回true;
}
}
解决方案
我用 html5webview 来解决这个problem.Download,并把它放到你的项目,那么你可以code就是这样的。
私人HTML5WebView mWebView;
字符串URL =SOMEURL;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
mWebView =新HTML5WebView(本);
如果(savedInstanceState!= NULL){
mWebView.restoreState(savedInstanceState);
} 其他 {
mWebView.loadUrl(URL);
}
的setContentView(mWebView.getLayout());
}
@覆盖
公共无效的onSaveInstanceState(包outState){
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
让视频旋转,把机器人:configChanges =方向code到你的活动 例如(AndroidManifest.xml中)
<活动机器人:ui.HTML5Activity名称=机器人:configChanges =方向/>
和覆盖onConfigurationChanged方法。
@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
super.onConfigurationChanged(NEWCONFIG);
}
I am trying to play html5 video and youtube video within android webview, but can't display video on android webview screen. and play this video.
I have used below code snippet...
layout xml file naming: test.xml contains below code snipet:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:id="@+id/rltvLayoutTest"
android:layout_height="fill_parent">
<WebView android:id="@+id/webViewTest" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
and Activity Class name: Test.java contains code given below:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
WebView mWebView = (WebView)findViewById(R.id.webViewTest);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.setWebChromeClient(new chromeClient());
mWebView.setWebViewClient(new WebViewClient(){
});
mWebView.loadUrl("http://broken-links.com/tests/video/");
}
public class chromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener{
private WebView wv;
private VideoView mVideoView;
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER);
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (view instanceof FrameLayout) {
wv = (WebView)findViewById(R.id.webViewTest);
mCustomViewContainer = (FrameLayout) view;
mCustomViewCallback = callback;
mContentView = (LinearLayout)findViewById(R.id.rltvLayoutTest);
if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
mVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
// frame.removeView(video);
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnErrorListener(this);
mVideoView.start();
}
}
}
public void onHideCustomView() {
if (mVideoView == null)
return;
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
public void onCompletion(MediaPlayer mp) {
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
setContentView(mContentView);
}
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
setContentView(mContentView);
return true;
}
}
解决方案
I used html5webview to solve this problem.Download and put it into your project then you can code just like this.
private HTML5WebView mWebView;
String url = "SOMEURL";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new HTML5WebView(this);
if (savedInstanceState != null) {
mWebView.restoreState(savedInstanceState);
} else {
mWebView.loadUrl(url);
}
setContentView(mWebView.getLayout());
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
To make the video rotatable, put android:configChanges="orientation" code into your Activity for example (Androidmanifest.xml)
<activity android:name=".ui.HTML5Activity" android:configChanges="orientation"/>
and override the onConfigurationChanged method.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
相关推荐
最新文章