当前位置:   article > 正文

android WebView 实现播放腾讯视频解决全屏播放问题_com.tencent.smtt.sdk.webview实现视频全屏播放

com.tencent.smtt.sdk.webview实现视频全屏播放

解决办法是使用腾讯X5内核 

一、在 build.gradle 引入 dependencies

  1. //腾讯内核WebView
  2. api 'com.tencent.tbs.tbssdk:sdk:43903'

二、在 build.gradle 设置 ndk

  1. ndk {
  2. // 设置支持的SO库架构
  3. abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a', "mips"
  4. }

三、在 AndroidManifest.xml 设置权限

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  4. <uses-permission android:name="android.permission.INTERNET" />
  5. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

四、在 AndroidManifest.xml 设置 activity 配置

  1. <!--这个是实现WebView的activity-->
  2. <activity
  3. android:name=".ui.MainActivity"
  4. android:configChanges="orientation|screenSize|keyboardHidden"
  5. android:windowSoftInputMode="stateHidden|adjustResize"
  6. android:hardwareAccelerated="true">
  7. <intent-filter>
  8. <action android:name="android.intent.action.MAIN" />
  9. <action android:name="android.intent.action.VIEW" />
  10. <category android:name="android.intent.category.LAUNCHER" /
  11. </intent-filter>
  12. </activity>
  13. <!--视频播放Activity-->
  14. <activity
  15. android:name="com.tencent.smtt.sdk.VideoActivity"
  16. android:configChanges="orientation|screenSize|keyboardHidden"
  17. android:exported="false"
  18. android:launchMode="singleTask"
  19. android:alwaysRetainTaskState="true">
  20. <intent-filter>
  21. <action android:name="com.tencent.smtt.tbs.video.PLAY" />
  22. <category android:name="android.intent.category.DEFAULT" />
  23. </intent-filter>
  24. </activity>

五、在 Application 里初始化 

  1. //在Application中加载X5内核
  2. private void initX5(){
  3. HashMap map = new HashMap();
  4. map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
  5. map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
  6. QbSdk.initTbsSettings(map);
  7. QbSdk.setDownloadWithoutWifi(true);
  8. Log.d("LOG_TAG", "开始加载内核");
  9. QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
  10. @Override
  11. public void onCoreInitFinished() {
  12. }
  13. @Override
  14. public void onViewInitFinished(boolean b) {
  15. if (b){
  16. Log.d("LOG_TAG", "内核加载成功");
  17. }else{
  18. Log.d("LOG_TAG", "内核加载失败");
  19. }
  20. }
  21. });
  22. QbSdk.setTbsListener(new TbsListener() {
  23. @Override
  24. public void onDownloadFinish(int i) {
  25. Log.d("LOG_TAG", "下载完成 progress = " + i);
  26. }
  27. @Override
  28. public void onInstallFinish(int i) {
  29. Log.d("LOG_TAG", "正在安装内核 progress = " + i);
  30. }
  31. @Override
  32. public void onDownloadProgress(int i) {
  33. Log.d("LOG_TAG", "已经下载 progress = " + i);
  34. }
  35. });
  36. }

六、更改使用腾讯X5内核 WebView

  1. <!--将 WebView -->
  2. <WebView
  3. android:id="@+id/webView"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"/>
  6. <!--改为 com.tencent.smtt.sdk.WebView-->
  7. <com.tencent.smtt.sdk.WebView
  8. android:id="@+id/webView"
  9. android:layout_width="fill_parent"
  10. android:layout_height="fill_parent"/>

七、将代码中相关的 import android.webkit.* 改为  com.tencent.smtt.*

具体根据自己代码改

  1. /*import android.webkit.JsResult;
  2. import android.webkit.URLUtil;
  3. import android.webkit.ValueCallback;
  4. import android.webkit.WebChromeClient;
  5. import android.webkit.WebResourceError;
  6. import android.webkit.WebResourceRequest;
  7. import android.webkit.WebSettings;
  8. import android.webkit.WebView;
  9. import android.webkit.WebViewClient;*/
  10. import com.tencent.smtt.export.external.interfaces.IX5WebChromeClient;
  11. import com.tencent.smtt.export.external.interfaces.JsResult;
  12. import com.tencent.smtt.export.external.interfaces.WebResourceError;
  13. import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
  14. import com.tencent.smtt.sdk.URLUtil;
  15. import com.tencent.smtt.sdk.ValueCallback;
  16. import com.tencent.smtt.sdk.WebChromeClient;
  17. import com.tencent.smtt.sdk.WebSettings;
  18. import com.tencent.smtt.sdk.WebView;

八、添加一些配置

下面这些需要哪些根据需要自己配置

  1. //支持设置
  2. WebSettings webSettings = webView.getSettings();
  3. //允许使用js
  4. webSettings.setJavaScriptEnabled(true);
  5. //设置DOM储存
  6. webSettings.setDomStorageEnabled(true);
  7. webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
  8. //WebView屏幕自适应
  9. webSettings.setUseWideViewPort(true);
  10. //WebView屏幕自适应
  11. webSettings.setLoadWithOverviewMode(true);
  12. //支持缩放
  13. webSettings.setSupportZoom(true);
  14. webSettings.setBuiltInZoomControls(true);
  15. //支持内容重新布局
  16. webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
  17. //多窗口
  18. webSettings.supportMultipleWindows();
  19. //设置可以访问文件
  20. webSettings.setAllowFileAccess(true);
  21. //当webview调用requestFocus时为webview设置节点
  22. webSettings.setNeedInitialFocus(true);
  23. //支持通过JS打开新窗口
  24. webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  25. //支持自动加载图片
  26. webSettings.setLoadsImagesAutomatically(true);
  27. //关闭硬件加速
  28. //webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
  29. //webView.setLayerType();
  30. //系统选择一种支持半透明(许多alpha位)的格式
  31. getWindow().setFormat(PixelFormat.TRANSLUCENT);
  32. //硬件加速渲染
  33. webView.setDrawingCacheEnabled(true);
  34. webView.setVerticalScrollBarEnabled(false); // 取消Vertical ScrollBar显示
  35. webView.setHorizontalScrollBarEnabled(false); // 取消Horizontal ScrollBar显示
  36. //webView.requestFocus();
  37. * if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  38. webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  39. }
  40. //webView.setFocusable(false);
  41. webSettings.setDefaultTextEncodingName("GBK");//设置文本编码(根据页面要求设置: utf-8*/
  42. webView.setWebViewClient(webViewClient);
  43. webView.setWebChromeClient(webChromeClient);
  44. //保存图片
  45. webView.setOnLongClickListener(onLongClickListener);
  46. webView.loadUrl(Constants.URL);
  1. //这两个没有设置可能会导致视频不能全屏
  2. //系统选择一种支持半透明(许多alpha位)的格式
  3. getWindow().setFormat(PixelFormat.TRANSLUCENT);
  4. //硬件加速渲染
  5. webView.setDrawingCacheEnabled(true);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/308945
推荐阅读
相关标签
  

闽ICP备14008679号