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
Google Maps, No Option for Starting the Navigation, Only Preview Is There
Navigating to Previous Fragment Without Reloading It
How to Disable Recyclerview Items from Clicking
Remove Old Fragment from Fragment Manager
How to Capitalize the First Letter of Text in a Textview in an Android Application
Update Some Specific Field of an Entity in Android Room
How to Check Miui Autostart Permission Programmatically
How to Make a New Line or Tab in <String> Xml (Eclipse/Android)
Open External Links in the Browser With Android Webview
How to Avoid Keyboard Pushing Layout Up on Android React-Native
Limitations on Opening Pdf File in Android
Full Screen Without Navigation & Status Bars
How to Set the Starting Position of a Scrollview
How to Connect SQL Server to Android Application