安卓接入騰訊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加載目錄默認為: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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容