2012-10-05 174 views
3

在我的webview中,我已經加載了一個具有電視頻道實時流的嵌入式視頻播放器的URL。它在Android的所有操作系統版本(ICS(4)除外)中都能正常工作。第一次它播放的視頻很好,但是當我回到那個包含視頻的頁面時,視頻並沒有加載,並顯示一個空白的白頁。如果我強制停止從應用程序設置的應用程序,並再次啓動應用程序然後它運行良好,然後像往常一樣再次出現白色屏幕,我已經實施了很多戰術,這是最新的,我完全卡在這裏:Webview在Ice Cream Sandwitch中顯示白色空白頁面

public class Livetvwebview extends Activity { 

    RelativeLayout a; 
    WebView webtv; 
    String url; 
    VideoView video; 
    WChromeClient chromeClient; 
    WebViewClient wvClient; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     // requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     getWindow().requestFeature(Window.FEATURE_PROGRESS); 
     setContentView(R.layout.livewebview); 
     Toast.makeText(getApplicationContext(), 
       "Channel is loading..This may take upto a minute", 
       Toast.LENGTH_LONG).show(); 
     url = getIntent().getStringExtra("tvchannel"); 
     Log.i("TVURL", url); 
     webtv = (WebView) findViewById(R.id.webViewlive); 
     webtv.clearCache(true); 
     webtv.loadUrl(url); 

     webtv.getSettings().setLoadWithOverviewMode(true); 
     webtv.getSettings().setUseWideViewPort(true); 

     webtv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

     webtv.setWebChromeClient(new WChromeClient()); 
     webtv.setWebViewClient(new myWebClient()); 
     webtv.getSettings().setJavaScriptEnabled(true); 

     webtv.getSettings().setPluginState(PluginState.ON); 

     webtv.getSettings().setDomStorageEnabled(true); 
    } 



    public class myWebClient extends WebViewClient { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      // TODO Auto-generated method stub 

      super.onPageStarted(view, url, favicon); 

     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      // TODO Auto-generated method stub 

      view.loadUrl(url); 

      return true; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 

     } 
    } 

    @SuppressLint("NewApi") 
    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     WebSettings webSettings = webtv.getSettings(); 
     webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
     webtv.onPause(); 
     this.finish(); 
     super.onPause(); 

    } 

    @SuppressLint("NewApi") 
    @Override 
    protected void onResume() { 



     webtv.onResume(); 
     super.onResume(); 

    } 






    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     // android.os.Process.killProcess(android.os.Process.myPid()); 
     Editor editor = getSharedPreferences("clear_cache", 
       Context.MODE_PRIVATE).edit(); 
     editor.clear(); 
     editor.commit(); 
     trimCache(this); 

     super.onDestroy(); 
    } 

    class WChromeClient extends WebChromeClient { 
     @Override 
     public void onProgressChanged(WebView view, int progress) { 
      Log.i("Method", "Onrogresschanged"); 

      Livetvwebview.this.setTitle("Loading..."); 
      Livetvwebview.this.setProgress(progress * 100); 
      if (progress == 100) 
       Livetvwebview.this.setTitle("LiveTv"); 

     } 

     @Override 
     public void onShowCustomView(View view, CustomViewCallback callback) { 
      // TODO Auto-generated method stub 
      super.onShowCustomView(view, callback); 
      if (view instanceof FrameLayout) { 
       FrameLayout frame = (FrameLayout) view; 
       if (frame.getFocusedChild() instanceof VideoView) { 
        webtv.setVisibility(View.GONE); 
        video = (VideoView) frame.getFocusedChild(); 
        FrameLayout.LayoutParams par = new FrameLayout.LayoutParams(
          LayoutParams.MATCH_PARENT, 
          LayoutParams.MATCH_PARENT); 
        par.gravity = Gravity.CENTER_HORIZONTAL; 
        video.setLayoutParams(par); 
        frame.removeView(video); 
        a.addView(video); 
        video.setOnCompletionListener(new OnCompletionListener() { 

         @Override 
         public void onCompletion(MediaPlayer mp) { 
          Toast.makeText(Livetvwebview.this, 
            "Video completed", Toast.LENGTH_LONG) 
            .show(); 

         } 
        }); 

        video.setOnErrorListener(new OnErrorListener() { 

         @Override 
         public boolean onError(MediaPlayer mp, int what, 
           int extra) { 
          Toast.makeText(Livetvwebview.this, 
            "Encountered some error", Toast.LENGTH_LONG) 
            .show(); 
          return true; 
         } 
        }); 
        video.start(); 
       } 

      } 

     } 
    } 

    public static void trimCache(Context context) { 
     try { 
      File dir = context.getCacheDir(); 
      if (dir != null && dir.isDirectory()) { 
       deleteDir(dir); 

      } 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
    } 

    public static boolean deleteDir(File dir) { 
     if (dir != null && dir.isDirectory()) { 
      String[] children = dir.list(); 
      for (int i = 0; i < children.length; i++) { 
       boolean success = deleteDir(new File(dir, children[i])); 
       if (!success) { 
        return false; 
       } 
      } 
     } 


     return dir.delete(); 
    } 
} 

任何人都可以幫助我嗎?

回答

3

研究爲我自己想通了,當我在的onPause(寫)很長很長的時間

webtv.destroy(); 

,而不是

webtv.onPause(); 

後解決了這個問題:)