Проблема появилась в моем WebView после обновления Chrome до 79 вер. 2019.12.18 в Android устройстве. Мой WebView перестал запрашивать разрешение на доступ к камере и микрофону, хотя в ранних версиях Chrome (56, 78) это работало. Я использую этот поставщик webRT C: https://trueconf.ru/. Я получаю эту ошибку в своих журналах каждые 15 секунд:
E/chromium: [ERROR:web_contents_delegate.cc(218)] WebContentsDelegate::CheckMediaAccessPermission: Not supported.
Если я пытаюсь открыть webRT C -сессию в Chrome, это работает. Так что, я думаю, есть некоторое расхождение между Chrome и хромом, или что-то в этом роде. Я создал небольшое приложение, которое эмулирует мой исходный код:
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieManager;
import android.webkit.PermissionRequest;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private static final int RC_CAMERA_AND_VOICE = 1;
private static final int RC_CAMERA_AND_CAMERA = 2;
private static final int RC_CAMERA_AND_CAPTURE = 3;
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermissions();
}
private void checkPermissions() {
Log.e("VideoChat", "checkPermissions");
if ((ContextCompat.checkSelfPermission(
this.getApplication(),
Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) &&
(ContextCompat.checkSelfPermission(this.getApplication(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED)) {
requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},0);
} else {
this.startWebView();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
}
this.startWebView();
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private void startWebView() {
webView = findViewById(R.id.web_view);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onPermissionRequest(final PermissionRequest request) {
Log.e("VideoChat", "onPermissionRequest");
request.grant(request.getResources());
}
});
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptThirdPartyCookies(webView, true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSaveFormData(true);
webView.getSettings().setSupportZoom(false);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl("https://your.webrtc.provider");
}
}
Мой манифест. xml:
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WRITE_LOCAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.MODIFY_AUDIO_SETTINGS"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.RECORD_AUDIO"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.CAMERA"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.CAPTURE_VIDEO_OUTPUT"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.CAPTURE_AUDIO_OUTPUT"
tools:ignore="ProtectedPermissions"
tools:node="replace"
tools:remove="android:maxSdkVersion" />
<uses-feature
android:name="android.hardware.camera.front"
android:required="true" />
<uses-feature
android:name="android.hardware.microphone"
android:required="true" />
Необходимо знать: я не заметил этой проблемы с другими webRT C -провайдеры, но я должен использовать моего провайдера. Любая помощь, пожалуйста.