gpt4 book ai didi

android - 无法在自定义 Webview 中全屏显示 Youtube 视频

转载 作者:太空狗 更新时间:2023-10-29 13:19:33 25 4
gpt4 key购买 nike

更新

我更新了我的问题以隐藏 secret 代码。

如果仍然有一些困惑,请在评论中给我留言。

问题

我已经编写了一个自定义 Webview,用于播放嵌入在我的网站中的 youtube 视频以全屏播放。

但是还是不行...请帮忙

   public class MainActivity extends Activity  implements OnClickListener {

final Context context = this;
private WebView webView;
private ImageButton btnrefresh;
private TextView txtrefresh;
private myWebChromeClient mWebChromeClient;
private Menu optionsMenu;
private WebChromeClient.CustomViewCallback customViewCallback;
private View mCustomView;
private FrameLayout customViewContainer;


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

//Tushar
customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
//Tushar
//define button
btnrefresh = (ImageButton) findViewById(R.id.imageButton1);

btnrefresh.setOnClickListener(this);
btnrefresh.setVisibility(View.GONE);

//define textView
txtrefresh = (TextView)findViewById((R.id.textView1));
txtrefresh.setVisibility(View.GONE);


if(isConnected())
{

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);

webView.getSettings().setRenderPriority(RenderPriority.HIGH);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setSaveFormData(true);
// webView.getSettings().setPluginState(PluginState.ON);
webView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {


if (url.startsWith("mailto:")) {
sendEmail(url.substring(7));
return true;
}

return false;
}

});


initWebView(webView);
webView.loadUrl("http://Example.com/");

}


else
{

RelativeLayout rel = (RelativeLayout)findViewById(R.id.relativelayout1);
rel.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
refresh();
}
});
btnrefresh.setVisibility(View.VISIBLE);
txtrefresh.setVisibility(View.VISIBLE);
Toast.makeText(getBaseContext(), "No Internet Connection !!", Toast.LENGTH_SHORT).show();


}
}

public boolean inCustomView() {
return (mCustomView != null);
}

public void hideCustomView() {
mWebChromeClient.onHideCustomView();
}

@Override
protected void onPause() {
super.onPause(); //To change body of overridden methods use File | Settings | File Templates.
webView.onPause();
}

@Override
protected void onResume() {
super.onResume(); //To change body of overridden methods use File | Settings | File Templates.
webView.onResume();
}

@Override
protected void onStop() {
super.onStop(); //To change body of overridden methods use File | Settings | File Templates.
if (inCustomView()) {
hideCustomView();
}
}

//tushar
class myWebChromeClient extends WebChromeClient {
private Bitmap mDefaultVideoPoster;
private View mVideoProgressView;

@Override
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
onShowCustomView(view, callback); //To change body of overridden methods use File | Settings | File Templates.
}

@Override
public void onShowCustomView(View view,CustomViewCallback callback) {

// if a view already exists then immediately terminate the new one
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mCustomView = view;
webView.setVisibility(View.GONE);
customViewContainer.setVisibility(View.VISIBLE);
customViewContainer.addView(view);
customViewCallback = callback;
}

@Override
public View getVideoLoadingProgressView() {

if (mVideoProgressView == null) {
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
mVideoProgressView = inflater.inflate(R.layout.video_progress, null);
}
return mVideoProgressView;
}

@Override
public void onHideCustomView() {
super.onHideCustomView(); //To change body of overridden methods use File | Settings | File Templates.
if (mCustomView == null)
return;

webView.setVisibility(View.VISIBLE);
customViewContainer.setVisibility(View.GONE);

// Hide the custom view.
mCustomView.setVisibility(View.GONE);

// Remove the custom view from its container.
customViewContainer.removeView(mCustomView);
customViewCallback.onCustomViewHidden();

mCustomView = null;
}
}

最佳答案

要做到这一点,你应该:

  1. 实现 WebChromeClientshowCustomViewhideCustomView 方法。
  2. android:hardwareAccelerated="true" 设置为 AndroidManifest.xml 中的 MainActivity

在您的代码中有两个继承WebChromeClient 的类(myWebChromeClientMyWebChromeClient)。第一个实现了 showCustomViewhideCustomView 方法,它似乎完全可以处理全屏视频。第二个没有。但是您(不小心?)将第二个设置为 WebChromeClient 到您的 WebView

要解决这个问题,只需更改行

webView.setWebChromeClient(new MyWebChromeClient());

mWebChromeClient = new myWebChromeClient();
webView.setWebChromeClient(mWebChromeClient);

在您的 initWebView() 方法中。

更新:

要在正常(非全屏)模式下锁定纵向方向,请将以下行添加到onHideCustomView() 方法中:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

要让系统决定全屏模式下的最佳方向,请将此行添加到 onShowCustomView(View view, CustomViewCallback callback) 方法:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

关于android - 无法在自定义 Webview 中全屏显示 Youtube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30748519/

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