Android QML网络视图摄影机权限
我正在开发一款具有视频聊天功能的移动应用程序。我为webrtc找到了一个很好的javascript库,它在Android QML网络视图摄影机权限,android,qt,qml,webrtc,qwebview,Android,Qt,Qml,Webrtc,Qwebview,我正在开发一款具有视频聊天功能的移动应用程序。我为webrtc找到了一个很好的javascript库,它在QWebView中似乎加载得很好,但我需要授予它访问摄像头和麦克风的权限,我不知道如何做到这一点。可能吗QWebEngineView有一个方便的信号和插槽,但手机不支持它 清单权限未按所述工作 对应的Qt错误: 有什么想法吗?清单权限不适用于Android 22>。因此,在您的情况下,您需要访问运行时权限。在Java中执行此操作 if (ContextCompat.checkSelfPerm
QWebView
中似乎加载得很好,但我需要授予它访问摄像头和麦克风的权限,我不知道如何做到这一点。可能吗QWebEngineView
有一个方便的信号和插槽,但手机不支持它
清单权限未按所述工作
对应的Qt错误:
有什么想法吗?清单权限不适用于Android 22>。因此,在您的情况下,您需要访问运行时权限。在Java中执行此操作
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
arrayOf(Manifest.permission.READ_CONTACTS),
MY_PERMISSIONS_REQUEST_READ_CONTACTS)
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
从…看。但在你的情况下,我认为你需要通过NDK来调用相同的行为。Qt已经在5.10版中实现了Android的权限模型 请参见此处: 您必须使用的功能包括:
- 检查权限
- 请求权限
- 请求许可同步
QStringList perms;
perms我们通过重新编译QT代码并更新相应的jar来解决这个QT错误。我们使用维护工具下载了Android的QT源代码。在查看QT源代码时,我们发现由于某些原因,QT开发人员没有覆盖WebRomeClient
的onPermissionRequest()
,因此WebView不允许媒体访问JS函数。请按照以下步骤解决问题
下载QT源代码
更新QtAndroidWebViewController.java
中的代码。此类位于~/Qt/5.10.0/Src/qtwebview/Src/jar/Src/org/qtproject/qt5/android/view。
将以下函数添加到内部类QtAndroidWebChromeClient
@凌驾
公共作废onPermissionRequest(PermissionRequest请求){
request.grant(request.getResources());
}
根据您的Android sdk,您可能需要进行注释/更改
旧版本Android的不推荐功能。你也可以改变
根据新版本的
安卓
然后在Qt creator中导入project~/Qt/5.10.0/Src/qtwebview,您可能需要一些Java知识来解决问题(如果您遇到一些构建问题)
根据构建文件夹路径设置,成功的构建项目将在路径build\u folder/jarQtAndroidWebView.jar
,QtAndroidWebView bundled.jar
中生成两个jar
替换路径~/Qt/5.10.0/android\u armv7/jar/中的jar
现在重建(干净构建)您的原始项目,该项目正在使用WebView,问题已得到解决
注意:路径可能会根据QT下载路径和操作系统的不同而变化,但内置jar可以在任何系统上更换(如java jar)
如果QT在下一版本中解决了这个问题,我们可以更换更新的JAR
对于android,您只需将权限添加到AndroidManifest.xml-details@Derek,我很高兴知道,您是否找到了解决方案,因为我也遇到了同样的情况。提前感谢。实际上,我们想通知主机应用程序web内容正在请求访问指定资源的权限并授予它。本机Android(java)“WebView”(Android.webkit.WebView)使用“WebRomeClient”(Android.webkit.WebChromeClient)提供此功能,并具有函数“onPermissionRequest()”,qt WebView是否具有类似功能。当Js函数请求媒体访问时。不是直接请求,但这可能会有所帮助:谢谢更新。以上答案是关于申请许可的。我们的问题是w.r.t.WebView要求从js功能(Web内容)访问媒体。Android原生java使用支持类“WebCromeClient”(Android.webkit.WebChromeClient)来实现这一点。请查看我的评论,了解Hubi的答案。
QStringList perms;
perms << "android.permission.CAMERA" << "android.permission.RECORD_AUDIO";
QtAndroid::checkPermissions(perms, [](const PermissionResultMap& resMap) {
foreach(const QString &key, resMap.keys()) {
qDebug() << "Result of permission" << key << ":" << resMap[key];
}
});