2014-08-31 2 views
0

Я пытаюсь играть видео в полноэкранном режиме на YouTube, но я не может Один пользователь послал мне следующий отчетPlay YouTube видео Полноэкранный WebView аварии

java.lang.NullPointerException 
at android.view.ViewGroup.addViewInner(ViewGroup.java:3377) 
at android.view.ViewGroup.addView(ViewGroup.java:3249) 
at android.view.ViewGroup.addView(ViewGroup.java:3225) 
at android.webkit.HTML5VideoFullscreen.enterFullscreen(HTML5VideoFullscreen.java:253) 
at android.webkit.HTML5VideoView.enterFullscreenVideoState(HTML5VideoView.java:527) 
at android.webkit.HTML5VideoViewProxy$VideoPlayer.enterFullscreenVideo(HTML5VideoViewProxy.java:180) 
at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:461) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4838) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
at dalvik.system.NativeStart.main(Native Method) 

код я использую:

   web.getSettings().setJavaScriptEnabled(true); 
       web.getSettings().setLoadWithOverviewMode(true); 
       web.getSettings().setUseWideViewPort(true); 
       web.getSettings().setBuiltInZoomControls(true); 
       web.getSettings().setPluginState(WebSettings.PluginState.ON); 


       web.setWebChromeClient(new WebChromeClient(){ 
        @Override 
        public void onProgressChanged(WebView view, int newProgress) {   
         super.onProgressChanged(view, newProgress); 
         pgb.setProgress(newProgress); 
         }  

        @Override 
        public View getVideoLoadingProgressView() { 
        FrameLayout frameLayout = new FrameLayout(MainActivity.this);  
        frameLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,  
        LayoutParams.MATCH_PARENT)); 
        return frameLayout; 
        } 
       }); 

       web.loadUrl("http://www.youtube.com"); 

Я просто хочу, чтобы я понял, как это сделать.

+0

Я думаю, проблема заключается в добавлении FrameLayout View, почему бы не использовать Actionbar Interminate Progress или попытаться поместить индикатор выполнения в макет xml и установить его видимость после страница будет загружена и спрячьте ее, когда прогресс будет равен 100 – Cjames

+0

, если вы считаете, что нашли решение, разместите его как ответ. Спасибо! :) –

ответ

0

Я использую actionbarcompat поэтому я следуя инструкциям UI здесь

webview_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

</RelativeLayout> 

Main.class

public class Main extends ActionBarActivity{ 

    private WebView mWebView; 
    private String url; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     setContentView(R.layout.webview_layout); 

     url="http://example.com"; 

     getSupportActionBar(); 
     getSupportActionBar().setDisplayShowCustomEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setTitle("TITLE HERE"); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setBuiltInZoomControls(true); 
     mWebView.getSettings().setAppCacheMaxSize(1024*1024*8); 
     mWebView.getSettings().setAppCachePath(""+this.getCacheDir()); 
     mWebView.getSettings().setAppCacheEnabled(true); 
     mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);  
     mWebView.loadUrl(url); 
     mWebView.setWebViewClient(new MyWebViewClient()); 

     mWebView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       super.onProgressChanged(view, progress); 
       setSupportProgressBarIndeterminateVisibility((progress == 100)?false:true); 
      } 
      public void onReceivedTitle(WebView view, String title) { 
       super.onReceivedTitle(view, title); 
       CharSequence notavail = "Webpage not available"; 

      } 
     }); 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
    private class MyWebViewClient extends WebViewClient { 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

} 

Пожалуйста, освободите для того чтобы спросить, если у них что-нибудь это не совсем понятно. С уважением, он поможет вам, не забудьте проголосовать

+0

Спасибо, что он работает с помощью панели действий, но мне хотелось бы что-то более simle. Так же, как браузер по умолчанию, который открывает галерею для полноэкранного видео. Отличная работа кстати. –

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