android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...
我想在Android WebView的PWA中使用QR码扫描仪。
PWA在chrome浏览器上可以正常工作。
我确实有在“应用程序”->“应用程序名称”->“权限”下设置摄像机的权限
minSdkVersion 26和targetSdkVersion 28
在装有Android 9的华为手机上测试
问题是似乎没有授予该权限。 另外,许可请求被重复多次。
Android代码
表现
android:name="android.hardware.camera"
android:required="true" />
根据上一个问题的答案,我在WebViewHelper类中有此代码
lateinit var webkitPermissionRequest : PermissionRequest
...
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
webkitPermissionRequest = request
val requestedResources = request.resources
for (r in requestedResources) {
if (r == PermissionRequest.RESOURCE_VIDEO_CAPTURE) {
// In this sample, we only accept video capture request.
val alertDialogBuilder = AlertDialog.Builder(activity)
.setTitle("Allow Permission to camera")
.setPositiveButton("Allow") { dialog, which ->
dialog.dismiss()
webkitPermissionRequest.grant(arrayOf(PermissionRequest.RESOURCE_VIDEO_CAPTURE))
Log.d(TAG, "Granted")
}
.setNegativeButton("Deny") { dialog, which ->
dialog.dismiss()
webkitPermissionRequest.deny()
Log.d(TAG, "Denied")
}
val alertDialog = alertDialogBuilder.create()
alertDialog.show()
break
}
}
}
...
}
日志:授予权限后,将再次请求(多次)
D/WebViewHelper: Granted
V/InputMethodManager: Reporting focus gain, without startInput
I/PermissionManager: camera remind result:true
I/CameraManager: open camera: 1, package name: "myApp"
I/BackgroundPermManager: pkgName: "myApp", pid: 31365 ,uidOf3RdApk: 10197 ,permType: 0 ,permCfg: 1
I/HwCameraUtil: notifySurfaceFlingerCameraStatus : isFront = true , isOpend = true
I/HwCameraUtil: notifySurfaceFlingerFrontCameraStatus 8011 transact success!
E/cr_VideoCapture: CameraDevice.StateCallback onOpened
I/WebViewHelper: onPermissionRequest
onPermissionRequest
这似乎是问题所在
I/GRALLOC: LockFlexLayout: baseFormat: 11, yStride: 640, ySize: 307200, uOffset: 307200, uStride: 640
E/ion: ioctl c0044901 failed with code -1: Invalid argument
I/chromium: "Unhandled rejection", source: "PWA
"Uncaught (in promise) NotAllowedError: play() can only be initiated by a user gesture.", source: "PWA"
最后,此错误重复出现(无限期)
I/GRALLOC: LockFlexLayout: baseFormat: 11, yStride: 640, ySize: 307200, uOffset: 307200, uStride: 640
JavaScript代码
JS端的代码可以很好地工作,直到在WebView中打开为止。
app.ports.scanQR.subscribe(() => {
// Delay until page loaded
setTimeout(function(){
const video = document.getElementById('media-video');
function returnResult(result) {
app.ports.onGotQR.send(result);
scanner.destroy();
}
const scanner = new QrScanner(video, result => returnResult(result));
scanner.start();
}, 50);
});
}
如果我直接致电getUserMedia,问题仍然存在
if (navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true })
.then(function (stream) {
video.srcObject = stream;
})
.catch(function (err0r) {
console.log("Something went wrong!");
});
}
取得相机的「应用程式」权限:
在WebviewHelper.kt中
webView.webChromeClient = object : WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
Log.i(TAG, "onPermissionRequest")
// grants permission for app. video not showing
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
) {
Log.i(TAG, "Request Permission")
requestPermissions(activity, arrayOf(Manifest.permission.CAMERA), 1010)
} else {
Log.i(TAG, "Permission already granted")
}
...
}
在MainActivity.kt中
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
when (requestCode) {
cameraRequestCode -> {
Log.d("MainActivity", "onRequestPermissionsResult: Camera Request")
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
Log.d("MainActivity", "Camera Request: Permission granted")
// permission was granted, yay!
} else {
// permission denied, boo!
Log.d("MainActivity", "Camera Request: Permission denied")
}
return
}
...
授予相机的“应用程序”权限后,将按预期结果显示以下日志:
D/MainActivity: onRequestPermissionsResult: Camera Request
Camera Request: Permission granted
android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...相关推荐
- android编译终止,android - Android NDK-没有此类文件或目录编译终止-头文件导出问题 - 堆栈内存溢出...
我正在尝试使用NDK将TagLib C ++库( http://taglib.github.io/ )导入Android. 通过按如下所示将所有源代码放在/jni/taglibroot/下,我能够成功 ...
- android 推送的小图标,android - 推送通知中没有声音并且没有自定义的小图标 - 堆栈内存溢出...
我已经使用Firebase Cloud Messaging实现了推送通知,除了几个自定义问题之外,其他所有功能都正常运行: 当我从Notification Composer工具发送测试通知时,清单中设 ...
- android framelayout 高度,android - Android:如何将FrameLayout中的线性布局与底部对齐? - 堆栈内存溢出...
使用属性layout_gravity对齐FrameLayout中的任何视图 android:layout_gravity:"bottom" /> 但是,如果您尝试将其放置在其 ...
- android autolink识别错误,android - autolink窃取ontouch事件,从而反馈触摸列表视图行无效 - 堆栈内存溢出...
我有一个listview . 并且行布局中包含很少的布局. 在行布局中,我有一个TextView ,我想在其上启用自动链接当我启用自动链接时,链接工作正常但我们点击列表行时得到的反馈不再有效. 在行布 ...
- haxe android,android - 具有Android目标的Haxe NME项目无法部署:Activity类不存在 - 堆栈内存溢出...
我在FlashDevelop中创建了一个NME项目,在Main.hx中加载了位图,然后单击以android为目标的build按钮. 构建成功完成,但是随后出现以下错误: Running process ...
- android parcel空指针,android - intent.hasExtra(“ meta”)抛出错误的可包裹异常 - 堆栈内存溢出...
嗨,在我的应用中,我在这一行代码中看到了一个异常 intent.hasExtra("meta") 这是我的例外 由android.os.BadParcelableException ...
- android 7.1内存泄漏,android - Android 7.1和7本机崩溃:libc.so tgkill + 12 - 堆栈内存溢出...
我看到此原生崩溃与以下堆栈跟踪. 我已经检查了与此类似的其他问题,但是未找到任何类似的解决方案,因为我没有使用TextureView或CardView,并且我也确定这不是由于任何库依赖性而引起的. 有 ...
- itext html 转换pdf后 字体加粗,java - 如何使用ITEXTRenderer将HTML转换为PDF时设置新的不同字体 - 堆栈内存溢出...
我正在尝试将HTML转换为PDF. 在HTML中,有些符号未显示在PDF文档中. 在调试时,我发现‑或‑字符在IText库中可用的任何默认字体中均不可用. 我的H ...
- c# 未能加载文件或程序集mysql.data,c# - 当我未引用文件或程序集Oracle.ManageddataAccess时,它无法加载 - 堆栈内存溢出...
我不断 System.IO.FileNotFoundException:'无法加载文件或程序集'Oracle.ManagedDataAccess,Version = 4.122.1.0,Culture ...
最新文章
- 如何用bat文件快速计算项目代码行数
- ThinkPHP的易忽视点小结
- LiveVideoStackCon 2021北京站 9月再次启航!
- python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态
- Maximum Subarray(最大连续子序列和)
- Unix系统使用的地址索引结构有什么特点?
- 有人做linux源码注释嘛,linux内核工作队列讲解和源码详细注释
- 前百度主任架构师创业,两年融资千万美元,他说 AI 新药研发将迎来黄金十年...
- 关于百度地图js api的getCurrentPosition定位不准确的解决方法
- 免费计算机网络基础ppt,计算机网络基础
- java如何向服务器传文件,详解Java向服务端发送文件的方法
- python画多边形太阳花
- 超级简单基于spring boot高速公路收费系统的设计与实现.rar(含源码及数据库文件)
- 电脑远程开机以及控制
- java如何获取一月的工作日,Java如何获取工作日名称列表?
- 北京大学,南下布局!
- 2020年复旦大学计算机学院夏令营经历
- 服务器中了挖矿病毒的检测及删除方法
- 计算机网络二:应用层
- 硅谷上市公司 Confluent 饶军:我能开公司,所有人都有机会
热门文章
- mpvue 小程序 页面跳转获取参数
- SQLServer windows身份验证连接字符串
- java中字节流的选择,求助,java中怎么用字节流读写汉字
- Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)
- 学生成绩查询java版_学生成绩查询系统,基于ssm的JAVA系统
- 注解和反射实现dao层增删改查
- 移植uboot之修改代码支持NorFlash记录
- 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)
- Topshelf创建Windows服务
- SQL PROMPT5.3.4.1的一些设置选项