[英]QML WebView Camera Permission
我正在開發具有視頻聊天功能的移動應用。 我為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.
}
}
我們通過重新編譯QT代碼並更新相應的jar解決了這個QT錯誤。 我們使用維護工具下載了Android的QT源代碼。 雖然經歷QT源代碼,我們發現,由於某些原因,Qt開發人員還沒有覆蓋onPermissionRequest()
的WebCromeClient
由於它的WebView是不是允許JS功能的媒體訪問。 請按照以下步驟解決問題。
下載QT源代碼。
更新QtAndroidWebViewController.java
代碼。 該類位於〜/ Qt / 5.10.0 / Src / qtwebview / src / jar / src / org / qtproject / qt5 / android / view 。 將以下函數添加到內部類QtAndroidWebChromeClient
。
@Override public void onPermissionRequest(PermissionRequest request){request.grant(request.getResources()); }
根據您的Android sdk,您可能需要為舊版本的Android評論/更改已棄用的功能。 此外,您可以根據Android的新版本更改QtAndroidWebViewClient
一些方法。
然后導入項目〜/ Qt / 5.10.0 / Src / qtwebview在您的Qt創建者中,您可能需要一些Java知識來解決問題(如果您遇到一些構建問題)
根據您的構建文件夾路徑設置,成功的構建項目將在路徑build_folder / jar QtAndroidWebView.jar
, QtAndroidWebView-bundled.jar
生成兩個jar。
替換路徑〜/ Qt / 5.10.0 / android_armv7 / jar /中的jar 。
現在重建(清理構建)您的原始項目,即使用WebView並且問題已解決。
注意:路徑可能會根據QT下載路徑和操作系統而改變,但構建的jar可以在任何系統上替換(如java jar)。
如果QT在下一版本中解決了這個問題,我們可以替換更新的jar。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.