Android Webview¶
Пример WebView приложения на Android¶
Данный пример может использоваться для открытия страницы любого примера Web SDK, как в браузере. Чтобы открыть страницу, необходимо указать URL, например
Так выглядит пример MCU Client
, открытый в режиме только аудио конференции в Android Webview
Работа с кодом примера¶
Для разбора кода возьмем классы MainActivity.java и WebViewActivity.java примера webview-example
, который доступен для скачивания в соответствующей сборке 1.1.0.26.
1. Запуск WebViewActivity
c указанным URL¶
button = (Button) findViewById(R.id.btnUrl);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = (EditText) findViewById(R.id.textUrl);
String url = et.getText().toString();
if (url.isEmpty()) {
showDialog();
} else {
Intent intent = new Intent(context, WebViewActivity.class);
intent.putExtra("url", url);
startActivity(intent);
}
}
});
2. Настройка параметров WebView¶
WebSettings settings = webView.getSettings();
// Enable Javascript
settings.setJavaScriptEnabled(true);
// Use WideViewport and Zoom out if there is no viewport defined
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
// Enable pinch to zoom without the zoom buttons
settings.setBuiltInZoomControls(true);
// Allow use of Local Storage
settings.setDomStorageEnabled(true);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
// Hide the zoom controls for HONEYCOMB+
settings.setDisplayZoomControls(false);
}
// Enable remote debugging via chrome://inspect
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
3. Настройка обработки ошибок при проверке SSL сертификатов открываемой страницы¶
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
case SslError.SSL_IDMISMATCH:
message = "The cerificate ID is mismatch";
break;
case SslError.SSL_DATE_INVALID:
message = "The certificate date is invalid";
break;
case SslError.SSL_INVALID:
message = "The certificate is invalid";
break;
}
builder.setTitle("SSL Cerificate Error");
builder.setMessage(message);
builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
handler.proceed();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
handler.cancel();
}
});
Log.d(TAG, "onReceivedSslError " + message);
final AlertDialog dialog = builder.create();
dialog.show();
}
});
4. Настройка обработки запроса прав доступа к камере и микрофону¶
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(final PermissionRequest request) {
Log.d(TAG, "Request permissions: ");
for (String res : request.getResources()) {
Log.d(TAG, res);
}
WebViewActivity.this.runOnUiThread(new Runnable() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
request.grant(request.getResources());
}
});
}
@Override
public void onPermissionRequestCanceled(PermissionRequest request) {
Log.d(TAG, "onPermissionRequestCanceled");
}
});
5. Запрос прав доступа к камере и микрофону¶
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA);
int hasRecordPermission = checkSelfPermission(Manifest.permission.RECORD_AUDIO);
List<String> permissions = new ArrayList<>();
if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.CAMERA);
}
if (hasRecordPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.RECORD_AUDIO);
}
if (!permissions.isEmpty()) {
requestPermissions(permissions.toArray(new String[permissions.size()]), 111);
}
}