Asking Camera Permission for Webview At Runtime

Why Doesn't My WebView App Prompt for Permissions?

You need to handle that as well by using ContextCompat.checkSelfPermission() for more detail you can visit this doc: https://developer.android.com/training/permissions/requesting you can also achieve this by using a third-party library such https://github.com/Karumi/Dexter

Need permission to access camera in Android web-view?

if your app targeting Android 6.0 and above than add runtime permission

Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app

add runtime permission using below code for camera

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);
}

and than handle result like this

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();
// perform your action here

} else {
Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
}
}

}

read about runtime permission

How to access the camera from inside a Webview?

This is answer

class WebViewActivity : AppCompatActivity() {

private val permission = arrayOf(Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.MODIFY_AUDIO_SETTINGS)
private val requestCode = 1

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_web_view)
val action: String? = intent?.action
val data: Uri? = intent?.data

WebViewSetup()
if (!isPermissionGranted()) {

askPermissions()

}

webview.webChromeClient = object : WebChromeClient() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
override fun onPermissionRequest(request: PermissionRequest) {
request.grant(request.resources)
}
}

}


private fun askPermissions() {
ActivityCompat.requestPermissions(this, permission, requestCode)
}

private fun isPermissionGranted(): Boolean {
permission.forEach {
if (ActivityCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED)
return false
}

return true
}

@SuppressLint("SetJavaScriptEnabled")
private fun WebViewSetup() {

val url = intent.extras!!.getString("url")
webview.webChromeClient = WebChromeClient()


webview.apply {
if (url != null) {
loadUrl(url)
}

Log.d("callBtn", "Url :: $url!!!! ")
settings.javaScriptEnabled = true
settings.javaScriptCanOpenWindowsAutomatically = true
settings.domStorageEnabled = true
settings.allowContentAccess = true
settings.safeBrowsingEnabled = true
settings.mediaPlaybackRequiresUserGesture = false


}
}

}

Android : Webcam Error in WebView (Camera Permission not working)

You've already handled runtime Camera permission of android os. We need to grant camera permission (RESOURCE_VIDEO_CAPTURE) inside webview also.

First call below method to open camera without user gesture:

binding.webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

Calling request.grant(request.getResources()) method like this will grant all requested permission.
To avoid that you should only grant permission which you need which is RESOURCE_VIDEO_CAPTURE:

@Override
public void onPermissionRequest(final PermissionRequest request) {
final String[] requestedResources = request.getResources();
for (String r : requestedResources) {
if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
break;
}
}
}

In your code this line was causing the issue: super.onPermissionRequest(request); this super method call denies the permission.

Android: WebView - not getting Camera and Mic enabled for conference

After getting those permissions, you need to override onPermissionRequest in WebChromeClient like this:

webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(final PermissionRequest request) {
request.grant(request.getResources());
}
});



Related Topics



Leave a reply



Submit