腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项

例子下载地址 https://www.lanzous.com/i2zsv5g      GIT就不用了麻烦的不行

本人安卓刚学 就上X5内核弄了老长时间由于对maven 和idea不熟悉刚开始导包都是问题(就业人员勿参考,因为此文没有水平)

先上图 解决了侧边填充不满问题(明白什么意思把?播放器侧边和安卓侧边有距离贼难看) 参考了http://www.cocoachina.com/cms/wap.php?action=article&id=25099

这个腾讯的相当于其他开源的播放器或者说浏览器我感觉很简单了封装的很好就是有时候不兼容出现一万种小问题

正题开始 (图少字多)

1  自己去官网下载 tbs_sdk_thirdapp_v3.6.0.1310_43612_sharewithdownload_withoutGame_obfs_20180706_163319 我的是这个看了看半年没更新了

把jar包复制到安卓studio lib 目录下 右键你的包 as library 添加库(其他添加方式也可以)

2  app 下的bulid文件添加

ndk{abiFilters "armeabi"}具体代码
apply plugin: ‘com.android.application‘

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId "com.example.avx52"
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk{abiFilters "armeabi"}
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt‘), ‘proguard-rules.pro‘
        }
    }
}

dependencies {
    implementation fileTree(include: [‘*.jar‘], dir: ‘libs‘)
    implementation ‘androidx.appcompat:appcompat:1.0.0-beta01‘
    implementation ‘android.arch.navigation:navigation-fragment:1.0.0-alpha09‘
    implementation ‘androidx.constraintlayout:constraintlayout:1.1.2‘
    implementation ‘com.android.support:appcompat-v7:26.1.0‘
    implementation ‘com.android.support.constraint:constraint-layout:1.1.3‘
    testImplementation ‘junit:junit:4.12‘
    androidTestImplementation ‘androidx.test:runner:1.1.0-alpha4‘
    androidTestImplementation ‘androidx.test.espresso:espresso-core:3.1.0-alpha4‘
    implementation files(‘libs/tbs_sdk_thirdapp_v3.6.0.1310_43612_sharewithdownload_withoutGame_obfs_20180706_163319.jar‘)
}

  3 把给的studio例子下的 jniLibs文件夹复制到你工程app\src\main\下的目录  同样把里面那个自带的Util文件夹复制到你java目录的包下

说一下那个Util文件夹下的类他继承了腾讯的X5webview 又一层封装我是直接用的大佬自己写

4 布局文件

注意

com.stdu.x5.utils.X5WebView 是你Util包路径下的java文件什么路径就写什么
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <com.stdu.x5.utils.X5WebView
        android:scrollbars="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:id="@+id/myweb">
    </com.stdu.x5.utils.X5WebView>

</RelativeLayout>

  

5 Main窗口代码

说白了他这还是有问题不知道是不是我的事情小窗模式没办法开

package com.stdu.x5;

import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
import com.stdu.x5.utils.WebViewJavaScriptFunction;
import com.stdu.x5.utils.X5WebView;
import com.tencent.smtt.sdk.QbSdk;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
 private X5WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
        setContentView(R.layout.activity_main);
        webView= findViewById(R.id.myweb);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        webView.getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
        webView.setDrawingCacheEnabled(true);
        webView.loadUrl("file:///android_asset/webpage/fullscreenVideo.html");
        enablePageVideoFunc();//窗口创建完毕开启页面内全屏
        //隐藏滚动条
        if (webView.getX5WebViewExtension() != null) {
            webView.getX5WebViewExtension().setHorizontalScrollBarEnabled(false);//水平不显示滚动按钮
            webView.getX5WebViewExtension().setVerticalScrollBarEnabled(false); //垂直不显示滚动按钮
        }
        //添加javascript事件
         webView.addJavascriptInterface(new WebViewJavaScriptFunction() {
    @Override
    public void onJsFunctionCalled(String tag) {

    }
             @JavascriptInterface
             public void onX5ButtonClicked() {
                 MainActivity.this.enableX5FullscreenFunc();
             }

             @JavascriptInterface
             public void onCustomButtonClicked() {
                 MainActivity.this.disableX5FullscreenFunc();
             }

             @JavascriptInterface
             public void onLiteWndButtonClicked() {
                 MainActivity.this.enableLiteWndFunc();
             }

             @JavascriptInterface
             public void onPageVideoClicked() {
                 MainActivity.this.enablePageVideoFunc();
             }

},"Android");

    }
    //判断内核是否加载失败这个方法我没调用
private  void preinitX5WebCore() {
    if (!QbSdk.isTbsCoreInited())
    {Toast.makeText(this, "x5加载失败", Toast.LENGTH_LONG).show();
        QbSdk.initX5Environment(this, null);}
    Toast.makeText(this, "x5加载OK", Toast.LENGTH_LONG).show();
}
    private void enableX5FullscreenFunc() {

        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "开启X5全屏播放模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

            data.putBoolean("standardFullScreen", false);// true表示标准全屏,false表示X5全屏;不设置默认false,

            data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

            data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

            webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams",
                    data);
        }else{
            Toast.makeText(this, "开启X5全屏播放模式失败view为空", Toast.LENGTH_LONG).show();
        }
    }

    private void disableX5FullscreenFunc() {
        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "恢复webkit初始状态", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

            data.putBoolean("standardFullScreen", true);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

            data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

            data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

            webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams",
                    data);
        }
    }

    private void enableLiteWndFunc() {
        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "开启小窗模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

            data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

            data.putBoolean("supportLiteWnd", true);// false:关闭小窗;true:开启小窗;不设置默认true,

            data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

            webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams",
                    data);
        }
    }

    private void enablePageVideoFunc() {
        if (webView.getX5WebViewExtension() != null) {
            Toast.makeText(this, "页面内全屏播放模式", Toast.LENGTH_LONG).show();
            Bundle data = new Bundle();

            data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false,

            data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true,

            data.putInt("DefaultVideoScreen", 1);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1

            webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams",
                    data);
        }
    }

   //如果web页面能返回就返回不能返回就退出
 @Override
public  void onBackPressed()
{ if(webView.canGoBack()) {webView.goBack(); }else { finish(); } }

}

5 mainfast.xml配置

加入权限

 <uses-permission android:name="android.permission.GET_TASKS" />
    <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"/>

  

播放窗口的activity 加入如下配置
android:alwaysRetainTaskState="true"android:configChanges="orientation|screenSize|keyboardHidden"代码
 <activity android:name=".MainActivity"
            android:alwaysRetainTaskState="true"
            android:configChanges="orientation|screenSize|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

  最后 因为他是和html交互的html代码如下 这个找了好长时间全屏 隐藏控制栏

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, maximum-scale=1, minimum-scale=1, user-scale=1">
    <title></title>
<style>
html,body,.main{   width: 100%;   height: 100%;   overflow: hidden;  background: #FFF;   box-sizing:border-box;}
.videobox{   position: fixed;   left: 0;   top: 0; right:0;  width: 101%;   height: 100%;}
</style>
</head>

</script>
<body>
   <div class="videobox" ontouchmove="return false;">
        <video poster="img/start.jpg" style="width:100%; height: auto;object-fit: fill;"  controls="controls" preload="auto" webkit-playsinline="" playsinline="" x5-playsinline=""  >
           <source src=https://bobo.kukucdn.com/20190125/4714_f2b52c41/index.m3u8>
        </video>

         <div style="width:100%;height: 25px;"></div>
        <button onclick="click_x5()"  style="width:50%;height: 50px; float: left"> x5模式全屏</button>
        <button onclick="click_normal()"  style="width:50%;height: 50px;"> 普通模式全屏</button>
        <div class="line"></div>
        <button onclick="click_LiteWnd()"  style="width:50%;height: 50px; float: left"> 小窗模式</button>
        <button onclick="click_normal()"  style="width:50%;height: 50px;"> 关闭小窗模式</button>
        <div class="line"></div>
        <button onclick="click_PageVideo()"  style="width:50%;height: 50px; float: left"> 页面内全屏</button>
        <button onclick="click_normal()"  style="width:50%;height: 50px;"> 关闭页面内全屏</button>
        <a href="index2.html"> 点我跳转页面</a>
   </div>

</body>

<script type="text/javascript" >
    function click_x5 (){
       Android.onX5ButtonClicked();
        location.reload(false);

    }
    function click_normal(){
        Android.onCustomButtonClicked();
        location.reload(false);
    }
    function click_LiteWnd(){
        Android.onLiteWndButtonClicked();
        location.reload(false);
    }
    function click_PageVideo(){
        Android.onPageVideoClicked();
        location.reload(false);
    }

</script>
</html>

  说一下如果你没办法全屏 或者全屏崩溃之类的可能是包没导好或者配置有问题,弄了一下午终于弄好了

原文地址:https://www.cnblogs.com/xuexidememeda/p/10324525.html

时间: 2024-12-28 11:10:50

腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项的相关文章

day01_linux中与Oracle有关的内核参数详解

linux中与Oracle有关的内核参数详解 在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip

Helloworld模块之内核makefile详解

Hello World 模块以及对应的内核makefile详解 hello.c: #include <linux/module.h> //所有模块都需要的头文件 #include <linux/init.h> // init&exit相关宏 MODULE_LICENSE("GPL"); MODULE_AUTHOR("feifei"); MODULE_DESCRIPTION("hello world module")

Linux 内核 hlist 详解

在Linux内核中,hlist(哈希链表)使用非常广泛.本文将对其数据结构和核心函数进行分析. 和hlist相关的数据结构有两个:hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head { struct hlist_node *first;//指向每一个hash桶的第一个结点的指针 }; //hash桶的普通结点 struct hlist_node { struct hlist_node *next;//指向下一个结点的指针 struct hl

LINUX下ORACLE相关的内核参数详解

ORACLE相关的内核参数详解 1.kernel.sem [[email protected] ~]# cat /proc/sys/kernel/sem 250         32000    100         142 [[email protected] ~]#  ipcs -sl ------ Semaphore Limits -------- max number of arrays = 142 max semaphores per array = 250 max semaphor

linux中与Oracle有关的内核参数详解

工作当中遇到oracle运行时CPU占用率达到90%以上,调小以下参数值后恢复正常. fs.file-max = 65536 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144 在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-n

详解Linux内核异常处理体系结构

本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程. [首先来区分一下两个概念:中断(Interrupt)和异常(Exception).中断属于异常的一种,就拿2440开发板来说,他有60多种中断源,例如来自DMA控制器.UART.IIC和外部中断等.2440有一个专门的中断控制器来处理这些中断,中断控制器在接收到这些中断信号之后就需要ARM920T进入IRQ或FIQ模式进行处理,这两种模式也是中断异常的仅有模式.而异常的概念要广的多,它包括复位.未定义指令.软中断.IRQ等等

#26 Linux kernel(内核)详解与uname、lsmod、modinfo、depmod、insmod、rmmod、modprobe...命令用法

Linux kernel: 内核设计流派: 单内核设计,但是充分借鉴了微内核体系设计的优点,为内核引入了模块化机制,内核高度模块化: 内核被模块化之后,一些最为基本最为重要的内容,被编译到内核核心:而其他更多的功能则以模块的方式来提供:而且支持动态装载和卸载各内核模块: 内核的组成部分: kernel:内核核心文件,一般为bzimage,经过压缩处理的镜像文件:通常内核核心文件保存在/boot/目录下,名称为vmlinuz-version-release kernel object(ko):内核

Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)

1 非抢占式和可抢占式内核 为了简化问题,我使用嵌入式实时系统uC/OS作为例子 首先要指出的是,uC/OS只有内核态,没有用户态,这和Linux不一样 多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯. 内核提供的基本服务是任务切换. 调度(Scheduler),英文还有一词叫dispatcher, 也是调度的意思. 这是内核的主要职责之一, 就是要决定该轮到哪个任务运行了. 多数实时内核是基于优先级调度法的, 每个任务根据其重要程度的不同被赋予

Linux内核编译详解

学习了网上的一些资料,自己试着摸索了一下,整理出这篇文章. 不当之处,还请大家批评指正.谢谢. 重要的参考资料有: http://raspberrypi.stackexchange.com/questions/192/how-do-i-cross-compile-the-kernel-on-a-ubuntu-host http://blog.csdn.net/xdw1985829/article/details/6833319 好了,下面进入正题. 一.准备工作 准备工作如何做,这里就不详说了.