2015-06-10 2 views
3

UpdateНевозможно Полноэкранный Youtube видео Внутри пользовательского WebView

Я обновил мой вопрос, чтобы скрыть секретный код.

Если все еще есть какие-то недоразумения, пожалуйста, в комментариях.

Вопрос

Я написал пользовательский 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; 
      } 
     } 
+0

Когда вы нажимаете на полноэкранную кнопку, вид замерзает? –

+0

Нет, ничего не происходит, Видео продолжает играть как обычно .. Я сделал аппаратное ускорение true –

+0

Никто не за сто Баунти? –

ответ

1

Для достижения этой цели необходимо:

  1. Реализовать showCustomView и hideCustomView методы WebChromeClient.
  2. Комплект android:hardwareAccelerated="true" на ваш MainActivity в AndroidManifest.xml.

Есть два класса, которые наследуют WebChromeClient в коде (myWebChromeClient и MyWebChromeClient). Первый реализует методы showCustomView и hideCustomView и, кажется, полностью работает с полноэкранным видео. Второй - нет. Но вы (случайно?) Устанавливаете второй как WebChromeClient на ваш WebView.

Чтобы исправить это просто изменить линию

webView.setWebChromeClient(new MyWebChromeClient()); 

в

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

в методе initWebView().

UPD:

Для блокировки ориентации на портрет в нормальном (не полноэкранный) режим добавить следующую строку в onHideCustomView() метод:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

позволить системе решать наилучшую ориентацию в полноэкранном режиме добавить эту строку в onShowCustomView(View view, CustomViewCallback callback):

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
+0

позвольте мне попробовать sir –

+0

Сэр У меня есть wriiten android: screenOrientation = "portrait"> в моем манифесте. но могу ли я посмотреть видео в ландшафтном режиме тоже ?? программно? –

+0

@tusharnarang Да, это возможно. См. Мой обновленный ответ. – erakitin

Смежные вопросы