1. 程式人生 > >解決原生webView無法載入部分格式視訊的問題

解決原生webView無法載入部分格式視訊的問題

  關於如何整合方面,雖然X5官網 有接入指南,但個人感覺某些方面不是很詳細,所以我就總結一下自己的整合步驟:

        1、首先在官網下載官方demo ,在手機上執行看看能否滿足自己的需求?如果不能滿足的話,我還知道有另一個專案,可以試試:Crosswalk ;

         2、仍然在X5官網,註冊開發者帳號,在開發者後臺申請APPkey,配置到自己的專案中;


   ## 第一步 ##

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

## 第二步 ##在X5官網,註冊開發者帳號,在開發者後臺申請APPkey,配置到自己專案的AndroidManifest.xml中;
  //x5web
    <meta-data
        android:name="QBSDKAppKey"
        android:value="申請的key"/>

## 第三步 ##
在Application中進行一些初始化

 //-----------------------騰訊X5核心的整合
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

            @Override
            public void onViewInitFinished(boolean arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onCoreInitFinished() {
                // TODO Auto-generated method stub

            }
        };
        QbSdk.setTbsListener(new TbsListener() {
            @Override
            public void onDownloadFinish(int i) {

            }

            @Override
            public void onInstallFinish(int i) {

            }

            @Override
            public void onDownloadProgress(int i) {

            }
        });
        QbSdk.allowThirdPartyAppDownload(true);
        QbSdk.initX5Environment(getApplicationContext(), 
        QbSdk.WebviewInitType.FIRSTUSE_AND_PRELOAD, cb);


## 第步 ##webViewSetting 設定

private void initWebView(String url) {
		// TODO Auto-generated method stub
		 WebSettings webSetting = information_webview.getSettings();  
		 webSetting.setAllowFileAccess(true);
			webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
			webSetting.setSupportZoom(true);
			webSetting.setBuiltInZoomControls(true);
			webSetting.setUseWideViewPort(true);
			webSetting.setSupportMultipleWindows(false);
			//webSetting.setLoadWithOverviewMode(true);
			webSetting.setAppCacheEnabled(true);
			//webSetting.setDatabaseEnabled(true);
			webSetting.setDomStorageEnabled(true);
			webSetting.setJavaScriptEnabled(true);
			webSetting.setGeolocationEnabled(true);
			webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
			webSetting.setAppCachePath(this.getDir("appcache", 0).getPath());
			webSetting.setDatabasePath(this.getDir("databases", 0).getPath());
			webSetting.setGeolocationDatabasePath(this.getDir("geolocation", 0)
					.getPath());
			// webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
			webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
		 Log.e("dd", url);
		 /*
		  * 用WebView顯示圖片,可使用這個引數 設定網頁佈局型別: 1、LayoutAlgorithm.NARROW_COLUMNS :  
		  * 適應內容大小 2、LayoutAlgorithm.SINGLE_COLUMN:適應螢幕,內容將自動縮放  
		  */  
		// webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);  
		// 設定支援縮放
		// 載入需要顯示的網頁
		// 這裡吐槽一下這J8網站 寫你妹的排隊,排你大爺
		information_webview.setWebViewClient(new WebViewClient() {
			@Override
			public void onPageFinished(WebView view, String url) {
				// TODO Auto-generated method stub
				super.onPageFinished(view, url);
				// 頁面下載完畢,卻不代表頁面渲染完畢顯示出來
				// WebChromeClient中progress==100時也是一樣

				progressBar.setVisibility(View.GONE);
				findViewById(R.id.title_divide).setVisibility(View.VISIBLE);
			}

			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				// TODO Auto-generated method stub
				// 自身載入新連結,不做外部跳轉
				view.loadUrl(url);
				return true;
			}

			@Override
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				// TODO Auto-generated method stub
				view.reload();
				progressBar.setVisibility(View.GONE);
				findViewById(R.id.title_divide).setVisibility(View.VISIBLE);
				super.onReceivedError(view, errorCode, description, failingUrl);
			}

		});
		information_webview.setWebChromeClient(new WebChromeClient() {
			@Override
			public void onProgressChanged(WebView view, int newProgress) {
				// TODO Auto-generated method stub
				super.onProgressChanged(view, newProgress);
				progressBar.setProgress(newProgress);  
                progressBar.postInvalidate();  
                if(newProgress == 100){
                	
                	progressBar.setVisibility(View.GONE);
                	findViewById(R.id.title_divide).setVisibility(View.VISIBLE);
                }

			}
			
			@Override
			public void onReceivedTitle(WebView view, String title) {
				if(!TextUtils.isEmpty(title)){
					if (title.length() > 14){
						titleTv.setText(title.subSequence(0, 14) + "...");
					}else{
						titleTv.setText(title);
					}
				}
			}
		});
		information_webview.loadUrl(url);

	}

## 第步 ##

開啟硬體加速

 <activity
            android:name="com.youmei.StampApp.activity.GuanggaoDetailsActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:launchMode="singleTask"
            android:hardwareAccelerated='true'
            android:screenOrientation="portrait" >
        </activity>

## 第步 ##

記得去官網替換jar包,以及相關的webView類,都是用騰訊的代替原生的

可以去官網看相關設定、、、 http://x5.tencent.com/doc?id=1004