安卓接入騰訊X5 TBS換原生WebView

  1. 騰訊瀏覽服務(wù)官網(wǎng)下載SDK,復(fù)制到libs下并Add As Library,同時復(fù)制demo里面的jniLibs文件夾到相應(yīng)位置,具體操作:
 1.如果使用是Eclipse則需要將所有的.so文件都放置在so加載目錄:lib/armeabi文件夾下(沒有該目錄則新建一個,AP中沒有使用到.so文件則需要拷貝任意一個32位的so文件到該目錄下,如果沒有合適的so可以到官網(wǎng)http://x5.tencent.com/tbs/sdk.html下載官網(wǎng)“SDK接入示例“,拷貝對應(yīng)目錄下的liblbs.so文件)菇绵,lib文件夾下不要有其他以”armeabi“開頭的文件夾。 
2.如果使用的是 Android studio則需要進行兩項配置, 
(1)打開對應(yīng)module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果沒有defaultConfig{}則手動添加)添加如下配置: ndk{abiFilters "armeabi"}樊诺,如果配置后編譯報錯,那么需要在gradle.properties文件中加上Android.useDeprecatedNdk=true音同; 
(2)找出build.gradle中配置的so加載目錄:jniLibs.srcDir:customerDir,如果沒有該項配置則so加載目錄默認(rèn)為:src/main/jniLibs词爬,需要將.so文件都放置在so加載目錄的armeabi文件夾下(沒有該目錄則新建一個,AP中沒有使用到.so文件則需要拷貝任意一個32位的so文件到該目錄下权均,如果沒有合適的so可以到官網(wǎng)http://x5.tencent.com/tbs/sdk.html下載官網(wǎng)“SDK接入示例“,拷貝對應(yīng)目錄下的liblbs.so文件)顿膨,so加載目錄下不要有其他以”armeabi“開頭的文件夾。 
可參考論壇回復(fù):http://bbs.mb.qq.com/thread-1473368-1-1.html .如果仍未能解決您的問題叽赊,請直接在論壇回復(fù)并描述您的問題

添加權(quán)限:

<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" />
  1. MainActivity:
import android.app.Activity;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import com.tencent.smtt.export.external.interfaces.IX5WebChromeClient;
import com.tencent.smtt.export.external.interfaces.JsResult;
import com.tencent.smtt.sdk.QbSdk;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;


import java.util.ArrayList;

public class MainActivity extends Activity {

    private com.tencent.smtt.sdk.WebView mWebView;

    private WebViewClient client = new WebViewClient() {
        /**
         * 防止加載網(wǎng)頁時調(diào)起系統(tǒng)瀏覽器
         */
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    };

    @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.file_layout);

        mWebView = (com.tencent.smtt.sdk.WebView) findViewById(R.id.web_file);
        
        //一些初始化配置
        initWebViewSettings();
        // 播放視頻
        Bundle data = new Bundle();
        data.putBoolean("standardFullScreen", false);
        data.putBoolean("supportLiteWnd", true);
        data.putInt("DefaultVideoScreen", 1);
        mWebView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);


        mWebView.loadUrl("http://xxxxxx");
        mWebView.getView().setClickable(true);
        mWebView.setWebViewClient(client);

        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
//
        mWebView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsConfirm(WebView arg0, String arg1, String arg2,
                                       JsResult arg3) {
                return super.onJsConfirm(arg0, arg1, arg2, arg3);
            }

            View myVideoView;
            View myNormalView;
            IX5WebChromeClient.CustomViewCallback callback;
            /**
             * 全屏播放配置
             */
            @Override
            public void onShowCustomView(View view,
                                         IX5WebChromeClient.CustomViewCallback customViewCallback) {
                FrameLayout normalView = (FrameLayout) findViewById(R.id.frame_web_video);
                ViewGroup viewGroup = (ViewGroup) normalView.getParent();
                viewGroup.removeView(normalView);
                viewGroup.addView(view, new FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.FILL_PARENT,
                        FrameLayout.LayoutParams.FILL_PARENT));
                myVideoView = view;
                myNormalView = normalView;
                callback = customViewCallback;
            }
//
            @Override
            public void onHideCustomView() {
                if (callback != null) {
                    callback.onCustomViewHidden();
                    callback = null;
                }
                if (myVideoView != null) {
                    ViewGroup viewGroup = (ViewGroup) myVideoView.getParent();
                    viewGroup.removeView(myVideoView);
                    viewGroup.addView(myNormalView);
                }
            }
//
            @Override
            public boolean onJsAlert(WebView arg0, String arg1, String arg2,
                                     JsResult arg3) {
                /**
                 * 這里寫入你自定義的window alert
                 */
                return super.onJsAlert(null, arg1, arg2, arg3);
            }
        });
//
//        去除QQ瀏覽器推廣
        getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                ArrayList<View> outView = new ArrayList<View>();
                getWindow().getDecorView().findViewsWithText(outView, "QQ瀏覽器", View.FIND_VIEWS_WITH_TEXT);
                int size = outView.size();
                if (outView != null && outView.size() > 0) {
                    outView.get(0).setVisibility(View.GONE);
                }
            }
        });
    }
    private void initWebViewSettings() {
        WebSettings webSetting = mWebView.getSettings();
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setBuiltInZoomControls(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setLoadWithOverviewMode(true);
        webSetting.setSupportMultipleWindows(false);
        webSetting.setAppCacheEnabled(true);
        // webSetting.setDatabaseEnabled(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setJavaScriptEnabled(true);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

    }
//
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (mWebView != null && mWebView.canGoBack()) {
                mWebView.goBack();
                return true;
            } else
                return super.onKeyDown(keyCode, event);
        }
        return super.onKeyDown(keyCode, event);
    }
//
    @Override
    protected void onDestroy() {
        if (mWebView != null)
            mWebView.destroy();
        super.onDestroy();
    }
//
}
  1. Laout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frame_web_video"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <com.tencent.smtt.sdk.WebView
        android:id="@+id/web_file"
        android:layout_width="fill_parent"
        android:layout_height="match_parent">


    </com.tencent.smtt.sdk.WebView>
</RelativeLayout>
  1. Manifest:
            android:name="com.xxx.MainActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"
            android:configChanges="orientation|screenSize|keyboardHidden"
            tools:targetApi="ice_cream_sandwich" /> ```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恋沃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子必指,更是在濱河造成了極大的恐慌囊咏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匆笤,居然都是意外死亡研侣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門炮捧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庶诡,“玉大人,你說我怎么就攤上這事咆课∧┦模” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵书蚪,是天一觀的道長喇澡。 經(jīng)常有香客問我,道長殊校,這世上最難降的妖魔是什么晴玖? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮为流,結(jié)果婚禮上呕屎,老公的妹妹穿的比我還像新娘。我一直安慰自己敬察,他們只是感情好秀睛,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莲祸,像睡著了一般蹂安。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锐帜,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天田盈,我揣著相機與錄音,去河邊找鬼缴阎。 笑死缠黍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的药蜻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼替饿,長吁一口氣:“原來是場噩夢啊……” “哼语泽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起视卢,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踱卵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惋砂,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡妒挎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了西饵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酝掩。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眷柔,靈堂內(nèi)的尸體忽然破棺而出期虾,到底是詐尸還是另有隱情,我是刑警寧澤驯嘱,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布镶苞,位于F島的核電站,受9級特大地震影響鞠评,放射性物質(zhì)發(fā)生泄漏茂蚓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一剃幌、第九天 我趴在偏房一處隱蔽的房頂上張望聋涨。 院中可真熱鬧,春花似錦锥忿、人聲如沸牛郑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淹朋。三九已至,卻和暖如春钉答,著一層夾襖步出監(jiān)牢的瞬間础芍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工数尿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仑性,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓右蹦,卻偏偏與公主長得像诊杆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子何陆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容