版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kururunga/article/details/85001014
由于嵌入一个3d的导航,需要支持webgl,但是android 6.0及其以上都无法开大,网上搜资料发现腾讯x5webview可以,附上地址:
https://x5.tencent.com/tbs/index.html
但是在实际使用过程中碰到很多问题,结尾再说.
1.导入jar和so文件:
我是直接下载demo,然后将demo的里so和jar下载下来,注意路径别放错,jar也要add library下。
jar:
so:
另外在build.gradle里的defaultconfig还需要加上;
android{
defaultconfig{
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
2.必要的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 硬件加速对X5视频播放非常重要,建议开启 -->
<uses-permission android:name="android.permission.GET_TASKS" />
3.Application设置初始化和硬件加速权限:
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
// TODO Auto-generated method stub
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.d("app", " onViewInitFinished is " + arg0);
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
}
};
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
<application
android:name=".APPAplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
4.webview的封装和设置:
public class WebViewFactory {
public void init(com.tencent.smtt.sdk.WebView webView, String url, boolean flag, Context context) {
com.tencent.smtt.sdk.WebSettings settings = webView.getSettings();
settings.setBuiltInZoomControls(true);
settings.setLayoutAlgorithm(com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
settings.setBlockNetworkImage(false);
settings.setSupportZoom(true);
settings.setSupportMultipleWindows(true);
settings.setAppCacheEnabled(true);
//居中
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setSavePassword(false);
settings.setSaveFormData(false);
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setGeolocationEnabled(true);
settings.setAppCacheMaxSize(Long.MAX_VALUE);
settings.setDomStorageEnabled(true);
settings.setPluginState(com.tencent.smtt.sdk.WebSettings.PluginState.ON_DEMAND);
settings.setCacheMode(com.tencent.smtt.sdk.WebSettings.LOAD_NO_CACHE);
String dir = context.getDir("database", Context.MODE_PRIVATE).getPath();
//设置定位的数据库路径
settings.setGeolocationDatabasePath(dir);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.requestFocus();
webView.loadUrl(url);
}
}
外部使用:
new WebViewFactory().init(webView, mUrl, true,this);
webView.setWebChromeClient(webChromeClient);
webView.setWebViewClient(webViewClient);
// webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webView.getView().setClickable(true);
webView.loadUrl(mUrl);
webviewclient的设置:
@Override
public boolean shouldOverrideUrlLoading(com.tencent.smtt.sdk.WebView webView, String s) {
webView.loadUrl(s);
return true;
}
另外官网还有个工具可以测试你的工程是否将原生webview替换为了腾讯的webview,运行选择要测试的路径即可。
我之前导入一直还是无法显示的原因就是硬件加速和之前的设置:
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
这句代码,之后即可打开