Android 專案引入騰訊X5核心
1、為什麼要整合騰訊 X5 瀏覽器核心
肯定是事出有因,簡單來說,JS程式碼寫的不標準,與部分機型內巢狀的瀏覽器核心產生矛盾,出現底層(os)bug導致,不得不費事搞一個其它核心進行載入網頁,具體原因。
2、官方網站及匯入 jar 包等
(1)、TBS騰訊瀏覽服務、jar 下載地址、官方接入文件
目前為止(2018/8/3),就三種。如圖:
我們就下載對簡單第一種吧,足以滿足我們的需要了。
(2)、專案內匯入jar檔案
解壓之後,檔案很多,但是有用的我感覺就是jar檔案了。
(3)、如何在自己專案內整合jar檔案(基礎)
第一步:將“.jar”檔案考入到專案下面的libs資料夾,如圖:
第二步:在 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 核心支援的視訊格式比原生的格式多很多。各位可以探索。馬上週末了。祝大家有個好週末哈。