如果想让自己的APP支持WebRTC 协议的视频流,解决方案如下:
放弃原生WebView 我们选用腾讯的TBS , 直接上代码
1.XML 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<EditText
android:id="@+id/et_url"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1" />
<TextView
android:id="@+id/tv_go"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="进入"
android:textColor="@android:color/holo_blue_dark" />
</LinearLayout>
<com.tencent.smtt.sdk.WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp" />
</LinearLayout>
- java 逻辑 (设置支持插件 pluginsEnabled )
@Suppress("UNREACHABLE_CODE")
class MainActivity : AppCompatActivity() {
var url: String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
init()
}
private fun init() {
initView()
initWeb()
}
private fun initWeb() {
webView.settings.let {
it.javaScriptEnabled = true
it.pluginsEnabled= true
}
webView.setWebViewClient(WebViewClient())
webView.setWebChromeClient(object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest){
request.grant(request.getResources())
}
})
}
private fun initView() {
url = SPUtils.get(this, "url", "http://wwww.baidu.com") as String
et_url.setText(url)
tv_go.setOnClickListener(View.OnClickListener {
url = et_url.text.toString()
webView.loadUrl(url)
SPUtils.put(this, "url", url)
})
}
override fun onDestroy() {
super.onDestroy()
webView.destroy()
}
}
- module 的 gradle配置
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "30.0.0"
defaultConfig {
applicationId "com.winspread.browser"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
api 'com.tencent.tbs.tbssdk:sdk:43903'
}