日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...

發(fā)布時(shí)間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我想在Android WebView的PWA中使用QR碼掃描儀。

PWA在chrome瀏覽器上可以正常工作。

我確實(shí)有在“應(yīng)用程序”->“應(yīng)用程序名稱”->“權(quán)限”下設(shè)置攝像機(jī)的權(quán)限

minSdkVersion 26和targetSdkVersion 28

在裝有Android 9的華為手機(jī)上測(cè)試

問(wèn)題是似乎沒(méi)有授予該權(quán)限。 另外,許可請(qǐng)求被重復(fù)多次。

Android代碼

表現(xiàn)

android:name="android.hardware.camera"

android:required="true" />

根據(jù)上一個(gè)問(wèn)題的答案,我在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

}

}

}

...

}

日志:授予權(quán)限后,將再次請(qǐng)求(多次)

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

這似乎是問(wèn)題所在

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"

最后,此錯(cuò)誤重復(fù)出現(xiàn)(無(wú)限期)

I/GRALLOC: LockFlexLayout: baseFormat: 11, yStride: 640, ySize: 307200, uOffset: 307200, uStride: 640

JavaScript代碼

JS端的代碼可以很好地工作,直到在WebView中打開(kāi)為止。

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,問(wèn)題仍然存在

if (navigator.mediaDevices.getUserMedia) {

navigator.mediaDevices.getUserMedia({ video: true })

.then(function (stream) {

video.srcObject = stream;

})

.catch(function (err0r) {

console.log("Something went wrong!");

});

}

取得相機(jī)的「應(yīng)用程式」權(quán)限:

在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

}

...

授予相機(jī)的“應(yīng)用程序”權(quán)限后,將按預(yù)期結(jié)果顯示以下日志:

D/MainActivity: onRequestPermissionsResult: Camera Request

Camera Request: Permission granted

總結(jié)

以上是生活随笔為你收集整理的android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。