版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html
按照官網上的說明:只需接入aar文件和調用一個接口便可完成TBS接入,咱們會經過全屏Activity展現TBS WebView,適用於快速接入TBS且常規使用WebView的開發者。java
按照接入文檔中的說明:tbsplus是在tbs sdk 完整版基礎上提供的開發者一鍵接入的AAR包,開發者只需經過Android Studio接入該AAR後調用一個接口就能夠實現瀏覽網頁的功能,tbsplus內部會封裝實現webview設置和工具欄等功能。react
本Demo演示tbsplus打開普通網頁、tbsplus預覽視頻功能以及演示預覽文件功能(在新的activity界面中預覽文件,不是在dialog中預覽文件)。android
其中,tbs預覽文件須要注意一下幾點:git
TBSPlus版存在的缺點:github
一、使用TBS打開普通網頁以及視頻的時候,底部始終存在工具欄:web
二、TBSPlus預覽視頻,會先在中間區域出現控制器: 瀏覽器
三、TBS預覽文件,第一頁右下角始終存在「查找|最近文件」按鈕(滑動後會消失)【共性問題,只要使用TBS預覽文件都會出現】: app
TbsPlus是對外接口類:ide
1、public static int openUrl(Context context, String url)
//url 要打開的網址,須要攜帶http,https,file,ftp四個協議頭中的一個,若是沒有攜帶,咱們會自動在url前面加上 http:// public static int openUrl(Context context, String url)
2、public static int openUrl(Context context, String url, eTBSPLUS_SCREENDIR screendir )
//url 要打開的網址,須要攜帶http,https,file,ftp四個協議頭中的一個,若是沒有攜帶,咱們會自動在url前面加上 http:// // screendir eTBSPLUS_SCREENDIR 枚舉 打開網頁時Activity的屏幕方向 // public static enum eTBSPLUS_SCREENDIR{ eTBSPLUS_SCREENDIR_SENSOR,/* 橫豎屏 */ eTBSPLUS_SCREENDIR_PORTRAIT,/* 豎屏 */ eTBSPLUS_SCREENDIR_LANDSCAPE/* 橫屏 */ } public static int openUrl(Context context, String url, eTBSPLUS_SCREENDIR screendir )
注意事項:
一、 導入類文件後須要change包名以及從新import R文件路徑
二、 Values目錄下的文件(strings.xml、dimens.xml、colors.xml等),若是項目中存在,則複製裏面的內容,不要整個覆蓋
下載地址:https://x5.tencent.com/tbs/sdk.html
下載的文件解壓後以下:【接入文檔頗有用】
參考《【Android Studio安裝部署系列】十7、Android studio引用第三方庫、jar、so、arr文件》
將TbsPlus接入示例文件中的demo項目的jniLibs目錄複製到項目的main目錄下【若是項目的main目錄中已經存在jniLibs文件夾,則只須要把so文件複製到相應armeabi目錄下】
在build.gradle文件中添加如下代碼
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.why.project.myx5tbsplusdemo"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//引用tbsplus ndk{abiFilters "armeabi"}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//引用tbsplus
repositories{
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//引用tbsplus
compile(name: 'tbsplus_3.6.0.1248_43611_sharewithdownload_withoutGame_obfs', ext: 'aar')
//運行時權限
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
compile 'io.reactivex.rxjava2:rxjava:2.0.2'
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
}
若是配置後編譯報錯,那麼須要在gradle.properties文件中加上Android.useDeprecatedNdk=true;
至此就引用成功了,在須要打開網頁的時機調用TbsPlus的OpenUrl接口便可,咱們內部會建立一個Activity展現網頁。參考MainActivity.java
若是想要實現預覽文件功能,那麼還須要進行下面的步驟:
package com.why.project.myx5tbsplusdemo; import android.Manifest; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.Toast; import com.tbruyelle.rxpermissions2.RxPermissions; import com.tencent.smtt.sdk.TbsReaderView; import io.reactivex.functions.Action; import io.reactivex.functions.Consumer; /** * Created by HaiyuKing * Used 調用騰訊瀏覽服務預覽文件 */ public class DisplayFileActivity extends AppCompatActivity{ private static final String TAG = DisplayFileActivity.class.getSimpleName(); private TbsReaderView mTbsReaderView;//用於預覽文件5-1 private String filePath = ""; private String fileName = ""; public static void openDispalyFileActivity(Context context,String filePath,String fileName){ Intent intent = new Intent(context,DisplayFileActivity.class); intent.putExtra("filepath",filePath); intent.putExtra("filename",fileName); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displayfile); initTbsReaderView();//用於預覽文件5-2 Intent intent = getIntent(); filePath = intent.getStringExtra("filepath"); fileName = intent.getStringExtra("filename"); onePermission(); } @Override protected void onDestroy() { super.onDestroy(); mTbsReaderView.onStop();//用於預覽文件5-5 } //初始化TbsReaderView 5-3 private void initTbsReaderView(){ mTbsReaderView = new TbsReaderView(DisplayFileActivity.this, new TbsReaderView.ReaderCallback(){ @Override public void onCallBackAction(Integer integer, Object o, Object o1) { //ReaderCallback 接口提供的方法能夠不予處理(目前不知道有什麼用途,可是必定要實現這個接口類) } }); RelativeLayout rootRl = (RelativeLayout) findViewById(R.id.root_layout); rootRl.addView(mTbsReaderView, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); } //預覽文件5-4 /** * filePath :文件路徑。格式爲 android 本地存儲路徑格式,例如:/sdcard/Download/xxx.doc. 不支持 file:///格式。暫不支持在線文件。 * fileName : 文件的文件名(含後綴)*/ private void displayFile(String filePath,String fileName) { Bundle bundle = new Bundle(); bundle.putString("filePath", filePath); bundle.putString("tempPath", Environment.getExternalStorageDirectory().getPath()); boolean result = mTbsReaderView.preOpen(parseFormat(fileName), false); if (result) { mTbsReaderView.openFile(bundle); } } private String parseFormat(String fileName) { return fileName.substring(fileName.lastIndexOf(".") + 1); } /**只有一個運行時權限申請的狀況*/ private void onePermission(){ RxPermissions rxPermissions = new RxPermissions(DisplayFileActivity.this); // where this is an Activity instance rxPermissions.request(Manifest.permission.READ_EXTERNAL_STORAGE) //權限名稱,多個權限之間逗號分隔開 .subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean granted) throws Exception { Log.e(TAG, "{accept}granted=" + granted);//執行順序——1【多個權限的狀況,只有全部的權限均容許的狀況下granted==true】 if (granted) { // 在android 6.0以前會默認返回true // 已經獲取權限 Toast.makeText(DisplayFileActivity.this, "已經獲取權限", Toast.LENGTH_SHORT).show(); } else { // 未獲取權限 Toast.makeText(DisplayFileActivity.this, "您沒有受權該權限,請在設置中打開受權", Toast.LENGTH_SHORT).show(); } } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.e(TAG,"{accept}");//多是受權異常的狀況下的處理 } }, new Action() { @Override public void run() throws Exception { Log.e(TAG,"{run}");//執行順序——2 displayFile(filePath,fileName); } }); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root_layout" android:layout_width="match_parent" android:layout_height="match_parent"> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.why.project.myx5tbsplusdemo"> <!-- ======================TBS的預覽文件功能========================== --> <!-- 容許程序讀取外部存儲文件 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!-- 容許程序寫入外部存儲,如SD卡上寫文件 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- TBS預覽文件界面 --> <activity android:name=".DisplayFileActivity"> </activity> </application> </manifest>
package com.why.project.myx5tbsplusdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.tencent.smtt.sdk.QbSdk; import tbsplus.tbs.tencent.com.tbsplus.TbsPlus; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 QbSdk.initX5Environment(MainActivity.this, null); initEvents(); } private void initEvents() { findViewById(R.id.btn_openUrl).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = "http://www.baidu.com"; TbsPlus.openUrl(MainActivity.this, url, TbsPlus.eTBSPLUS_SCREENDIR.eTBSPLUS_SCREENDIR_SENSOR); } }); findViewById(R.id.btn_openfile).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //請求下面的地址會打開第三方瀏覽器軟件,我這邊打開的是QQ瀏覽器(多是默認的瀏覽器) /*String url = "http://www.beijing.gov.cn/zhuanti/ggfw/htsfwbxzzt/shxfl/fw/P020150720516332194302.doc"; TbsPlus.openUrl(MainActivity.this, url, TbsPlus.eTBSPLUS_SCREENDIR.eTBSPLUS_SCREENDIR_SENSOR);*/ //TBS目前只支持加載本地文件。因此遠程文件須要先下載,後用TBS加載文件顯示。 //這裏沒有演示下載過程,而是直接把上面的文件下載到手機中【下面的路徑根據實際狀況修改】 String filePath = "/storage/emulated/0/QQBrowser/文檔/P020150720516332194302.doc"; String fileName = "P020150720516332194302.doc"; DisplayFileActivity.openDispalyFileActivity(MainActivity.this,filePath,fileName); } }); findViewById(R.id.btn_openvideo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //直播,點播視頻均可以播放 String url = "http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8"; TbsPlus.openUrl(MainActivity.this, url, TbsPlus.eTBSPLUS_SCREENDIR.eTBSPLUS_SCREENDIR_SENSOR); } }); } }
無
基於騰訊瀏覽服務 TBS 實現應用內打開並瀏覽 Office 文件