Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android QML网络视图摄影机权限_Android_Qt_Qml_Webrtc_Qwebview - Fatal编程技术网

Android QML网络视图摄影机权限

Android QML网络视图摄影机权限,android,qt,qml,webrtc,qwebview,Android,Qt,Qml,Webrtc,Qwebview,我正在开发一款具有视频聊天功能的移动应用程序。我为webrtc找到了一个很好的javascript库,它在QWebView中似乎加载得很好,但我需要授予它访问摄像头和麦克风的权限,我不知道如何做到这一点。可能吗QWebEngineView有一个方便的信号和插槽,但手机不支持它 清单权限未按所述工作 对应的Qt错误: 有什么想法吗?清单权限不适用于Android 22>。因此,在您的情况下,您需要访问运行时权限。在Java中执行此操作 if (ContextCompat.checkSelfPerm

我正在开发一款具有视频聊天功能的移动应用程序。我为webrtc找到了一个很好的javascript库,它在
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/jar
    QtAndroidWebView.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];
         }
    });