我正在开发一个带有视频聊天功能的移动应用程序。我找到了一个很棒的webrtc的javascript库,它似乎可以在QWebView
中正常加载,但我需要给它访问摄像头和麦克风的权限,我想不出如何做到这一点。这是可能的吗?QWebEngineView
对于这个问题有一个方便的信号和插槽,但它不支持移动端。
清单权限没有按照这里所描述的那样工作。
相关的Qt bug:无法通过QML WebView访问相机和麦克风
有什么想法吗?
我正在开发一个带有视频聊天功能的移动应用程序。我找到了一个很棒的webrtc的javascript库,它似乎可以在QWebView
中正常加载,但我需要给它访问摄像头和麦克风的权限,我想不出如何做到这一点。这是可能的吗?QWebEngineView
对于这个问题有一个方便的信号和插槽,但它不支持移动端。
清单权限没有按照这里所描述的那样工作。
相关的Qt bug:无法通过QML WebView访问相机和麦克风
有什么想法吗?
Qt在版本5.10中实现了Android的权限模型。
请参见:http://doc.qt.io/qt-5/qtandroid.html。
你需要使用以下函数:
如果您想要访问相机和麦克风,则必须在使用之前请求权限。
例如:
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];
}
});
在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.
}
}