TBS 腾讯浏览服务 集成

腾讯浏览服务-首页  http://x5.tencent.com/

官方文档不多,不过实例比较详细,配置和谷歌的Webview差不多,Webview有的方法,TBS也都有。

jar包不到300KB,但是它需要X5内核,需要另外下载,不过如果手机装了微信QQ,就可以用它们的了。

把下载jar包添加到项目

在Application添加

public class App extends Application {

    @Override
    public void onCreate() {

        super.onCreate();

        // 搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
        // TbsDownloader.needDownload(getApplicationContext(), false);

        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

            @Override
            public void onViewInitFinished(boolean arg0) {
                // TODO Auto-generated method stub
                Log.e("apptbs", " onViewInitFinished is " + arg0);
            }

            @Override
            public void onCoreInitFinished() {
                // TODO Auto-generated method stub

            }
        };
        QbSdk.setTbsListener(new TbsListener() {
            @Override
            public void onDownloadFinish(int i) {
                Log.d("apptbs", "onDownloadFinish");
            }

            @Override
            public void onInstallFinish(int i) {
                Log.d("apptbs", "onInstallFinish");
            }

            @Override
            public void onDownloadProgress(int i) {
                Log.d("apptbs", "onDownloadProgress:" + i);
            }
        });

        QbSdk.initX5Environment(getApplicationContext(), cb);

    }

}

MainActivity    布局全是按钮

public class MainActivity extends Activity {

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intent = new Intent(MainActivity.this, WebActivity.class);
    }

    public void btn(View v) {
        switch (v.getId()) {

        case R.id.btn1:
            intent.putExtra("url", "https://www.huxiu.com/article/168405.html");
            startActivity(intent);
            break;
        case R.id.btn2:
            intent.putExtra("url", "http://feizaojilao.esy.es/history.html");
            startActivity(intent);
            break;
        case R.id.btn3:
            intent.putExtra("url", "http://v.qq.com/cover/z/z1x68ih8qwjbsen.html");
            startActivity(intent);
            break;
        case R.id.btn4:
            intent.putExtra("url", "http://v.youku.com/v_show/id_XMTc3NTIzNjY2NA==.html?spm=a2hww.20023042.m_223465.5~5~5~5!2~5~5~A&from=y1.3-idx-beta-1519-23042.223465.4-1");
            startActivity(intent);
            break;
        case R.id.btn5:
            intent.putExtra("url", "http://www.hao123.com/");
            startActivity(intent);
            break;
        case R.id.btn6:
            intent.putExtra("url", "http://www.apta.gov.cn/Information/ActivityDetail?aid=167");
            startActivity(intent);
            break;
        case R.id.btn7:
            intent.putExtra("url", "http://220.180.239.166/Information/ActivityDetail?aid=123");
            startActivity(intent);
            break;

        default:
            break;
        }

    }

}

WebActivity

public class WebActivity extends Activity {

    WebView tbsWebView;
    ProgressBar web_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);

        String url = getIntent().getStringExtra("url");

        web_bar = (ProgressBar) findViewById(R.id.web_bar);
        web_bar.getProgressDrawable().setColorFilter(Color.RED,
                android.graphics.PorterDuff.Mode.SRC_IN);

        tbsWebView = (WebView) findViewById(R.id.tbsWebView);
        tbsWebView.loadUrl(url);

        WebSettings settings = tbsWebView.getSettings();
        settings.setJavaScriptEnabled(true);

        // 设置加载进来的页面自适应手机屏幕
        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);

        settings.setSupportZoom(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(true);

        //settings.setUserAgent( );

        tbsWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.e("WebView ", "shouldOverrideUrlLoading " + url);
                view.loadUrl(url);
                return true;
            }

        });

        tbsWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                web_bar.setProgress(newProgress);

                if (newProgress == 100) {
                    web_bar.setVisibility(View.GONE);
                } else {
                    web_bar.setVisibility(View.VISIBLE);
                }
            }

        });
    }

    @Override
    protected void onDestroy() {
        if (tbsWebView != null)
            tbsWebView.destroy();
        super.onDestroy();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && tbsWebView.canGoBack()) {
            tbsWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

}

布局

<RelativeLayout 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"
    tools:context="com.example.tsbdemo.WebActivity" >

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

    <ProgressBar
        android:id="@+id/web_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="-7dp"
        android:layout_marginTop="-7dp"
        android:indeterminate="false" />

</RelativeLayout>

简单测试了一下,没有什么问题,感觉应该不会差,毕竟微信QQ内置的Webview都是这个

参考

性能 http://x5.tencent.com/guide?id=4000

Crosswalk 开发浅析,忘掉那些Webview的坑 - sslinp的博客 - 博客频道 - CSDN.NET  http://blog.csdn.net/sslinp/article/details/51607237

Android WebView常见问题及解决方案汇总 - Whatever is worth doing is worth doing well. - 博客频道 - CSDN.NET  http://blog.csdn.net/t12x3456/article/details/13769731

QQ浏览器X5内核问题汇总  https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/

时间: 2024-10-25 21:42:13

TBS 腾讯浏览服务 集成的相关文章

腾讯浏览服务X5内核集成

腾讯浏览服务X5内核集成https://www.jianshu.com/p/8a7224ff371a TBS 腾讯浏览器服务接入文档https://x5.tencent.com/tbs/guide/sdkInit.html SDK 下载 https://x5.tencent.com/tbs/sdk.html https://x5.tencent.com/tbs/guide.html 基于腾讯浏览服务 TBS 实现应用内打开并浏览 Office 文件https://blog.csdn.net/gr

AppCan + 腾讯浏览服务:更快的APP

移动互联网时代,Web场景没有变少,而是越来越多的分布在各个APP里.越来越多的开发人员采用Hybrid模式,更方便和轻量的部署移动业务.而作为Hybrid模式的重要一环,APP中对web场景的浏览能力支持,直接影响APP的体验和能力. 今日,国内领先的Hybrid混合开发平台AppCan与腾讯浏览服务深度合作,全面提升H5兼容性.适配性.扩展性,让App在国内碎片化严重的Android环境下表现更加一致和出色.今后,AppCan开发者可以直接使用"X5专用浏览模块",具体说来,在打包

使用腾讯证书服务为Centos7+Apache申请颁发证书

说到证书我们大家都知道,证书可以提高数据加密传输,但是提到证书服务的供应商,相对比较多可以根据自己的需求来定,今天我们使用腾讯的云服务平台中的证书服务来为Centos7下的Apache服务申请及分配证书,现在的第三方证书服务都现在都简化了,无需提供csr文件即可生成证书及私钥文件,所以我们无需申请相关的csr证书申请文件了,还需要注意此次过程中,我们需要有自己有公网域名,因为在申请证书的时候需要验证.具体见下: 腾讯云服务地址:https://console.qcloud.com/ 我们首先需要

Java千百问_08JDK详解(005)_jdk服务集成类库都有什么

点击进入_更多_Java千百问 1.jdk服务集成类库都有什么 了解java核心框架看这里:java核心框架是什么样的 1. 数据库链接工具(Java Database Connectivity,JDBC) JDBC API提供了使用java访问数据库的通用接口,使用JDBC 3.0或以上,开发人员编写的应用程序可以访问几乎任何数据源,从关系数据库到电子表格甚至文本文件,JDBC技术还提供了很多通用的基础工具和备用接口. 了解JDBC看这里:[JDBC是什么][3] 远程方法调用(Remote

IBM ODM规则服务集成的最佳实践

企业IT架构中,我们通常会将规则引擎作为一个独立的服务,供企业中的不同应用消费,这也和当前一切皆服务的SOA思想吻合.那么问题来了,规则服务以什么形式部署呢?怎样和应用交互集成呢?Webservice? 好吧,这是一个标准答案,并且也是一个差不多正确的答案,但我们还有更多需要考虑的东西. 我曾在一个保险行业客户处看到这样一个设计:客户设计了一个webservice,用于定义核保的输入输出,然后定义了一个EJB服务来包装规则服务,供webservice调用,在该EJB的实现中,再调用ODM自带的E

JavaWeb-SpringBoot_(上)腾讯点播服务之视频的上传

使用Gradle编译项目 传送门 腾讯视频云点播 传送门 腾讯点播服务之视频的显示(下) [完成时会将源码上传github] 传送门 github 传送门 (一).使用原生JQuery获取文件 (二).简单上传文件(无封面提示信息)  (三).上传视频及封面并增加上传提示信息 各个功能模块的默认配置文件application.properties #thymeleaf编码风格 spring.thymeleaf.encoding=UTF-8 #热部署静态文件 spring.thymeleaf.ca

架构模式: 服务集成契约测试

架构模式: 服务集成契约测试 上下文 您已应用微服务架构模式.该应用程序包含许多服务.服务通常会调用其他服务.您必须编写自动化测试,以验证服务是否正常运行. 问题 如何轻松测试服务是否提供了客户期望的API? 要点 端到端测试(即启动多个服务的测试)是困难,缓慢,脆弱和昂贵的. 结论 服务的测试套件,由使用它的另一个服务的开发人员编写.测试套件验证服务是否满足消费者服务的期望. 例子 Spring Cloud Contract是一个支持这种测试方式的开源项目. 结果上下文 这种模式具有以下好处:

无纸化办公从汇讯WiseUC+OA集成开始

办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,自1985年国内召开第一次办公自动化规划会议以来,OA在应用内容的深度与广度.IT技术运用等方面都有了新的变化和发展,并成为组织不可缺的核心应用系统.主要推行一种无纸化办公模式. 而汇讯WiseUC企业内部办公沟通云平台,由深圳励拓软件有限公司研发,创建于2006年,致力于为中国千万家上网企业.亿万办公人群提供即时通讯和协同办公服务,是国内企业即时通讯行业第一品牌,10年来始终致力于为企业用户提供安全.高效.稳定的

微服务集成——《微服务设计》读书笔记

一.理想的集成应该是什么样的? 1.避免破坏性修改 如果在一个微服务的响应中添加一个字段,服务的消费方不应该受到影响. 2.保证API的技术无关性 微服务之间的通信应该是与技术无关的. 3.使服务的消费方易于使用 如果消费方使用该服务比登天还难,那么无论该微服务多漂亮都没用任何意义.但同时,易于使用的服务可能内部封装了很多细节,这会增加耦合. 4.隐藏内部实现细节 消费方与服务方的内部细节应该是分开的,如果与细节绑定,则意味着改变服务内部的一些变化,消费方也要跟着修改,这会增加修改的成本. 二.