Android WebView加载webrtc视频通话
最近需要做个Web端和移动端视频通话的功能,使用了webrtc来实现。在android端使用WebView来加载webrtc页面。Web端发起视频通话请求时,可以使用极光推送来通知移动端,然后移动端做出响应。注意,在targetSdkVersion版本大于23时,有可能出现移动端视频无法显示的情况(摄像头不自动打开),这时需要动态授权。1.AndroidManifest.xml文件添加...
·
最近需要做个Web端和移动端视频通话的功能,使用了webrtc来实现。在android端使用WebView来加载webrtc页面。
Web端发起视频通话请求时,可以使用极光推送来通知移动端,然后移动端做出响应。
注意,在targetSdkVersion版本大于23时,有可能出现移动端视频无法显示的情况(摄像头不自动打开),这时需要动态授权。
1.AndroidManifest.xml文件添加以下权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
2.Activity代码如下:
import android.annotation.TargetApi;
import android.content.pm.PackageManager;
import android.net.http.SslError;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.PermissionRequest;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity{
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_player);
webView = (WebView) findViewById(R.id.web_view);
//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
//如果不调用这个函数,将会打开一个默认的浏览器
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl("https://192.168.72.216:8085/rtc/webrtc.jsp?roomId=abc");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
//判断页面加载的过程
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if (newProgress == 100) {
// 网页加载完成
Log.d("加载完成...","success");
} else {
// 加载中
Log.d("加载中...",+newProgress+"");
}
}
@Override
public void onPermissionRequest(final PermissionRequest request) {
VideoPlayerActivity.this.runOnUiThread(new Runnable(){
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
request.grant(request.getResources());
}// run
});// MainActivity
}// onPermissionRequest
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK)
{
if(webView.canGoBack())
{
webView.goBack();//返回上一页面
return true;
}
else
{
System.exit(0);//退出程序
}
}
return super.onKeyDown(keyCode, event);
}
}
3.界面文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="#ffffff"
android:orientation="vertical">
<WebView
android:id="@+id/web_view"
android:layout_margin="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
更多推荐
已为社区贡献1条内容
所有评论(0)