Разрешение камеры от Webview Android
У меня есть веб-сайт, который сканирует qr. Сайт написан на js. Камера не работает при просмотре этого сайта в Webview. Помогите пожалуйста с этой проблемой.
Вот манифест
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.front" android:required="true" />
Код на java
public class MainActivity extends AppCompatActivity{
WebView webView;
ProgressBar progressBar;
ExampleCallback exampleCallback;
static class ExampleCallback{
@JavascriptInterface
public void dataResponse(String res) {
//Put your code to open cameraa
}
}
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String permission = Manifest.permission.CAMERA;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(this, permission_list, 1);
}
webView = (WebView) findViewById(R.id.webView);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onPermissionRequest(final PermissionRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
request.grant(request.getResources());
}
}
});
if (isOnline()) {
webView.loadUrl("//");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressBar.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
progressBar.setVisibility(View.GONE);
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
webView.loadUrl("//");
super.onReceivedError(view, request, error);
}
});
}else{
webView.loadUrl("//");
progressBar.setVisibility(View.GONE);
}
}
@SuppressLint("AddJavascriptInterface")
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
// perform your action here
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
webView.addJavascriptInterface(new WebAppInterface(this), "PLATFORM_ID");
else {
Toast.makeText(MainActivity.this,"Нет разрешения камеры", Toast.LENGTH_SHORT).show();
}
}
}
private static class WebAppInterface {
public WebAppInterface(Context context) {
}
@JavascriptInterface
public void openCamera(String title) {
//check permissions and open camera intent;
}
}
@Override
public void onBackPressed() {
if (webView.canGoBack()){
webView.goBack();
}else {
super.onBackPressed();
}
}
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null &&
cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
}
Это на JS
function showAndroidToast(res) {
Android.dataResponse(res);
}
Помогите пожалуйста, в чем ошибка. Приложение открывается, камера спрашивает разрешения. Один раз даже нормально работало. Но потом перестало работать. Камера отображает черный экран.