1. 程式人生 > >Android 專案引入騰訊X5核心

Android 專案引入騰訊X5核心

1、為什麼要整合騰訊 X5 瀏覽器核心

肯定是事出有因,簡單來說,JS程式碼寫的不標準,與部分機型內巢狀的瀏覽器核心產生矛盾,出現底層(os)bug導致,不得不費事搞一個其它核心進行載入網頁,具體原因

2、官方網站及匯入 jar 包等

(1)、TBS騰訊瀏覽服務jar 下載地址官方接入文件

目前為止(2018/8/3),就三種。如圖:
TBS sdk
我們就下載對簡單第一種吧,足以滿足我們的需要了。

(2)、專案內匯入jar檔案

解壓之後,檔案很多,但是有用的我感覺就是jar檔案了。
解壓之後

(3)、如何在自己專案內整合jar檔案(基礎)

第一步:將“.jar”檔案考入到專案下面的libs資料夾,如圖:
專案內拷入 jar 檔案

第二步:在 jar 檔案上右擊,調出下拉選單 ,點選下圖標註的 Add As Library… 選項
第二步

第三步:選擇jar 檔案新增到的專案,我這裡直接確定就行了:
第三步

第四步;等待Android Studio 進行同步下載,配置等等。

第五步:檢查是否匯入成功
第五步

3、專案實戰

(1)、佈局程式碼

佈局內建立一個騰訊的 WebView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<include layout="@layout/activity_title_bar" /> <com.tencent.smtt.sdk.WebView android:id="@+id/wv_task" android:layout_width
="match_parent" android:layout_height="match_parent" android:visibility="gone" />
</LinearLayout>

(2)、 Application 內進行相關初始化操作(重要)

  @Override
    public void onCreate() {
        super.onCreate();
        //非wifi情況下,主動下載x5核心
        QbSdk.setDownloadWithoutWifi(true);
        //蒐集本地tbs核心資訊並上報伺服器,伺服器返回結果決定使用哪個核心。
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5核心初始化完成的回撥,為true表示x5核心載入成功,否則表示x5核心載入失敗,會自動切換到系統核心。
            }

            @Override
            public void onCoreInitFinished() {

            }
        };
        //x5核心初始化介面
        QbSdk.initX5Environment(getApplicationContext(), cb);
    }

QbSdk.setDownloadWithoutWifi(true);:該方法預設為 false,表示為當手機內沒有 X5 核心並且當為為非wifi環境,呼叫系統的核心,既然是呼叫系統自帶的,那我們還整合 X5 幹嘛(有毛病?太勤快了?有那時間打會王者榮耀好不)。所以,這裡設定為true,但是設定為true 就會導致用那裡會產生 24M 左右的流量。在當下我們身邊充斥著 微信與qq,凡是有智慧機就必裝的軟體,你沒有,那沒辦法,花點流量吧。我個人建議設定為 true ,雖然有點流氓吧,但是沒辦法啊。

這裡引入一下騰訊爸爸(暫且稱之為爸爸)的文件哈:
有沒有 很霸氣側漏

(3)、專案內使用WebView
第一步、初始化

  @BindView(R.id.wv_task)
    WebView wvTask;

第二步、啟用 js 呼叫,設定 webView 活躍狀態


    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onResume() {
        super.onResume();
        wvTask.onResume();
        wvTask.getSettings().setJavaScriptEnabled(true);
    }

第三步、設定 WebView 的相關屬性

        wvTask.getSettings().setSupportZoom(true); //支援縮放,預設為true。是下面那個的前提。
        wvTask.getSettings().setBuiltInZoomControls(true); //設定內建的縮放控制元件。若為false,則該WebView不可縮放
        wvTask.getSettings().setDisplayZoomControls(true); //隱藏原生的縮放控制元件
        wvTask.getSettings().setBlockNetworkImage(false);//解決圖片不顯示
        wvTask.getSettings().setLoadsImagesAutomatically(true); //支援自動載入圖片
        wvTask.getSettings().setDefaultTextEncodingName("utf-8");//設定編碼格式

        String url="http://47.95.243.116/#/bigScreen";
        wvTask.loadUrl(url);
        Logger.d("監控介面載入的url為: " + url);

        //該介面開啟更多連結
        wvTask.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {
                webView.loadUrl(s);
                return true;
            }
        });
        //監聽網頁的載入進度
        wvTask.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView webView, int i) {
                if (i < 100 && MainTaskFragment.this.isVisible()) {
                    tvTaskProgress.setVisibility(View.VISIBLE);
                    webView.setVisibility(View.GONE);
                } else {
                    if (MainTaskFragment.this.isVisible()) {
                        tvTaskProgress.setVisibility(View.GONE);
                        webView.setVisibility(View.VISIBLE);
                    }
                }
            }
        });

這裡指的說的一個事情是,騰訊的核心不支援 onPageStarted()方法,所以你如果要監聽載入進度則只能在onProgressChanged進行相關切換 dialog 等操作。

相關配置,按需來就好了,我只需要上面那些;

第四步:退出介面暫停 webView的活躍,並且關閉 JS 支援


    @Override
    public void onPause() {
        super.onPause();
            wvTask.onPause();
            wvTask.getSettings().setLightTouchEnabled(false);
    }

第五步:關閉介面時,銷燬webview

//銷燬 放置記憶體洩漏
    @Override
    public void onDestroy() {
        if (this.wvTask != null) {
            wvTask.destroy();
        }
        super.onDestroy();
    }

當然了,各位小夥伴可以看一下官方demo,也可以留言問我,我懂的一定給你解答哈。對了 X5 核心支援的視訊格式比原生的格式多很多。各位可以探索。馬上週末了。祝大家有個好週末哈。