簡體   English   中英

QML WebView相機權限

[英]QML WebView Camera Permission

我正在開發具有視頻聊天功能的移動應用。 我為webrtc找到了一個不錯的javascript庫,它似乎在QWebView加載得很好,但我需要授予它訪問攝像頭和麥克風的權限,我無法弄清楚如何做到這一點。 可能嗎? QWebEngineView有一個方便的信號和插槽,但它不支持移動。

所描述的清單權限不工作在這里

相應的Qt bug: 無法通過QML WebView訪問攝像頭和麥克風

有任何想法嗎?

Qt在5.10版本中實現了Android的權限模型。

見這里: http//doc.qt.io/qt-5/qtandroid.html

您必須使用的功能是:

  • 的checkPermission
  • requestPermissions
  • requestPermissionsSync

如果要訪問攝像頭和麥克風,則必須在使用前請求權限。 例:

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.
    }
}

官方文件中看到。 但在你的情況下,我認為你需要通過NDK級別來調用相同的行為。 它也在這里描述。

我們通過重新編譯QT代碼並更新相應的jar解決了這個QT錯誤。 我們使用維護工具下載了Android的QT源代碼。 雖然經歷QT源代碼,我們發現,由於某些原因,Qt開發人員還沒有覆蓋onPermissionRequest()WebCromeClient由於它的WebView是不是允許JS功能的媒體訪問。 請按照以下步驟解決問題。

  1. 下載QT源代碼。

  2. 更新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()); }

  3. 根據您的Android sdk,您可能需要為舊版本的Android評論/更改已棄用的功能。 此外,您可以根據Android的新版本更改QtAndroidWebViewClient一些方法。

  4. 然后導入項目〜/ Qt / 5.10.0 / Src / qtwebview在您的Qt創建者中,您可能需要一些Java知識來解決問題(如果您遇到一些構建問題)

  5. 根據您的構建文件夾路徑設置,成功的構建項目將在路徑build_folder / jar QtAndroidWebView.jarQtAndroidWebView-bundled.jar生成兩個jar。

  6. 替換路徑〜/ Qt / 5.10.0 / android_armv7 / jar /中的jar

  7. 現在重建(清理構建)您的原始項目,即使用WebView並且問題已解決。

    注意:路徑可能會根據QT下載路徑和操作系統而改變,但構建的jar可以在任何系統上替換(如java jar)。

    如果QT在下一版本中解決了這個問題,我們可以替換更新的jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM