1. 程式人生 > >騰訊X5核心使用 Android WebView 的一些小問題

騰訊X5核心使用 Android WebView 的一些小問題

公司做個商城,然後我就簡單的做個啟動引導頁,然後用個原生WebView套一下,加個載入動畫,解決下第三方登入支付的返回問題,這些問題以前也搞過,哎喲,倆小時,一個專案OK了,沾沾自喜中。

然後過了幾天,老闆就開始反饋,APP載入太慢了,滑動卡頓,然後叫我組解決。然後我想了下,已經設定了延時載入圖片,你這個圖片那麼多,卡卡的怪我咯,想了想,哎,想在下面這個方法中搞個圖片壓縮替代

1 @Override
2 public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
3     return super
.shouldInterceptRequest(webView, s); 4 }

然後,我忘記了百度搜索什麼鬼的時候,在一個貼吧看到了騰訊X5核心,替代系統核心,然後我果斷搜尋下了官網   http://x5.tencent.com/tbs/  

 (Ps: 這編輯器什麼鬼啊,怎麼沒有url輸入啊,還有,我編輯了html程式碼,加了個<a>標籤為什麼不管用)

哎喲,不錯啊,高大上啊,趕緊下個demo,看著套一下,挺高大上的,你們看 ↓↓↓↓↓↓↓↓↓↓↓↓

 

哇,簡直了對吧,哈哈,就你了。

下載官方demo,然後,怎麼是個eclipse的版本啊,而且只有這一個,這簡直不能配上馬總的高大上啊,哎喲算了,先匯入執行再說。

匯入as後,配置下gradle,匯入jar包,so庫,哎喲,騰訊就是騰訊啊,資源,程式碼一個錯誤沒有,用gradlew build打個包瞅瞅唄。

咦,報錯了,這個錯誤見過很多次,資源錯誤,模組衝突,都爆這個錯誤, 應該是包匯入有問題吧。

 

然後,我懷疑我遇到個假騰訊網站,不說了,貼圖

 資源清單裡面有4個activity沒有定義,握草什麼鬼,你認真的找了一遍,jar看完也沒有這些activity啊,嘖嘖嘖,註釋掉也跑不了

然後我再次百度了下騰訊X5核心官網,百度上這一個X5官網,就這個,握草,騰訊,馬總,看在我為你花了那麼多錢的份上,你就這麼對待我這位金主的麼

哎,官網靠不住,馬上上百度。

在百度瞅了瞅,然後順便整合下,下面我就和各位說下我的整合步驟(可用)。

1.  匯入jar包,和so庫

2. 用到的所有原生WebView匯入的類和介面都改匯入  com.tencent.smtt.sdk   裡面的類,類介面名對應

3. AndroidManifest.xml里加入許可權宣告:

<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" />

4. 初始化X5核心。

複製程式碼
// 在 application 裡面加入 
@Override
    public void onCreate() {
        super.onCreate();

        preinitX5WebCore();
        //預載入x5核心
        Intent intent = new Intent(this, AdvanceLoadX5Service.class);
        startService(intent);
    }

    private void preinitX5WebCore() {
        if (!QbSdk.isTbsCoreInited()) {
            QbSdk.preInit(getApplicationContext(), null);// 設定X5初始化完成的回撥介面
        }
    }


// x5 init service
public class AdvanceLoadX5Service extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        initX5();
    }

    private void initX5() {
        //  預載入X5核心
        QbSdk.initX5Environment(getApplicationContext(), cb);
    }

    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
        }
    };

}
複製程式碼

握草, 能用了,好感動  , 哈哈哈哈      

然後還有就是,它右邊自帶滾動條小方塊,用WebView去滾動的方法沒軟用,↓↓↓↓↓

複製程式碼
        mMainWebView.setHorizontalScrollBarEnabled(false);
        mMainWebView.setVerticalScrollBarEnabled(false);
        //下面方法去掉
        IX5WebViewExtension ix5 = mMainWebView.getX5WebViewExtension();
        if (null != ix5) {
            ix5.setScrollBarFadingEnabled(false);
        }
複製程式碼

好了,經過上面的配置,x5能搞了

說下x5核心優點:

 1. 原生WebView自帶不支援git圖片   x5支援

 2. 恩,載入快很多,它對圖片壓縮載入了

 3.  顯示的時候,就是回撥 onPageFinished() 這個的時候,介面已經很流暢了,這個boos肥腸滿意

 4. x5看在我帥的面子上沒給我報錯,恩,好東西

我想說下第三方登入支付返回的問題和我的解決方案:

1. 我在 WebViewClient 介面的 onPageStarted() 用 ListView 儲存非本公司的所有url (如果你問我為啥不在onPageFinished,也行我會告訴你我樂意,不不不,放onPageFinished有問題,別問我為什麼,我不知道,你列印這倆個地方的url,特喵的少了幾個url)

2. 我在onBackPressed() 裡面搞了點事,至於什麼事,不好解釋呀,貼程式碼吧

複製程式碼
@Override
    public void onBackPressed() {

        if (mMainWebView.canGoBack()) {
            int index = mGoBackUrlList.size();
            if (index == 0 || index == 1) {
                mMainWebView.goBack();
                mGoBackUrlList.clear();
            } else {
                if (mMainWebView.canGoBackOrForward(-index)) {
                    mMainWebView.goBackOrForward(-index);
                    mGoBackUrlList.clear();
                } else {
                    mMainWebView.goBack();
                    mGoBackUrlList.clear();
                }
            }

        } else {
            super.onBackPressed();
        }
    }
複製程式碼

暫時能用,沒人教我,只好用笨方法了 (PS:我想噴一下銀聯網頁線上支付,你特麼是大爺,進去了不繫結銀行卡,不支付你特麼就不然退是吧,行吧,大爺)