2017-05-16 15 views
11

मैं एक ऐसे मोबाइल ऐप पर काम कर रहा हूं जिसमें वीडियो चैट सुविधा है। मुझे Webrtc के लिए एक अच्छी जावास्क्रिप्ट लाइब्रेरी मिली, जो QWebView में ठीक है, लेकिन मुझे कैमरा और माइक्रोफ़ोन तक पहुंचने की अनुमति देने की आवश्यकता है और मैं यह नहीं समझ सकता कि इसे कैसे किया जाए। क्या यह संभव है? QWebEngineView के लिए एक आसान सिग्नल और स्लॉट है, लेकिन यह मोबाइल के लिए समर्थित नहीं है।क्यूएमएल वेबव्यू कैमरा अनुमति

मैनिफेस्ट अनुमतियां here वर्णित अनुसार काम नहीं कर रही हैं।

अनुरूप क्यूटी बग: cant access camera and mic with QML WebView

कोई भी विचार?

+0

एंड्रॉयड के लिए, आप बस AndroidManifest.xml करने के लिए अनुमति जोड़ सकते हैं - विवरण [यहां] (http://doc.qt.io/qtcreator/creator-deploying-android.html) – Skynet

+1

@Derek, मुझे जानकर खुशी हो रही है, क्या आपको इसके लिए समाधान मिला, क्योंकि मैं एक ही स्थिति में हूं। अग्रिम में धन्यवाद। अद्यतन के लिए –

उत्तर

5

एंड्रॉइड 22> के लिए मेनिफेस्ट अनुमति काम नहीं करती है। तो आपके मामले में, आपको रनटाइम अनुमति तक पहुंचने की आवश्यकता है। जावा में यह प्रदर्शन।

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

Official Doc से देखें। लेकिन आपके मामले में, मुझे लगता है कि आपको एक ही व्यवहार को कॉल करने के लिए एनडीके के माध्यम से स्तर की आवश्यकता है। यह here भी वर्णित है।

+0

धन्यवाद। उपरोक्त उत्तर आवेदन अनुमति के संबंध में है। हमारा मुद्दा w.r.t. है वेबव्यू जेएस फ़ंक्शन (वेब ​​सामग्री) से मीडिया एक्सेस के लिए पूछ रहा है। एंड्रॉइड नेटिव जावा इसे सपोर्टिंग क्लास 'वेबक्रोम क्लाइंट' (android.webkit.WebChromeClient) का उपयोग करके करता है। हुबी के उत्तर के लिए कृपया मेरी टिप्पणी देखें। – Swapnil

5

क्यूटी ने संस्करण 5.10 में एंड्रॉइड के अनुमति मॉडल को लागू किया है।

यहां देखें: 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]; 
    } 
}); 
+0

असल में हम मेजबान एप्लिकेशन को सूचित करना चाहते हैं कि वेब सामग्री निर्दिष्ट संसाधनों तक पहुंचने और उसे अनुदान देने की अनुमति का अनुरोध कर रही है। मूल एंड्रॉइड (जावा) 'वेब व्यू' (android.webkit.WebView) 'WebCromeClient' (android.webkit.WebChromeClient) का उपयोग करके इस कार्यक्षमता प्रदान करता है और 'onPermissionRequest()' पर कार्य करता है, क्या qt WebView की समान कार्यक्षमता है। जब जेएस फ़ंक्शन मीडिया एक्सेस के लिए पूछता है। – Swapnil

+0

सीधे नहीं, लेकिन शायद यह मदद कर सकता है: http://doc.qt.io/qt-5/qtwebchannel-index.html – Hubi

2

हम क्यूटी कोड recompiling और अद्यतन इसी जार द्वारा इस क्यूटी बग संकल्प लिया। हमने रखरखाव उपकरण का उपयोग कर एंड्रॉइड के लिए क्यूटी स्रोत कोड डाउनलोड किया। क्यूटी स्रोत कोड के माध्यम से जाने के दौरान हमने पाया कि कुछ कारणों से क्यूटी डेवलपर्स WebCromeClient ओवरराइड नहीं कर रहे हैं, जिसके कारण वेबव्यू जेएस कार्यों तक मीडिया तक पहुंच नहीं दे रहा है। समस्या को हल करने के लिए कृपया निम्नलिखित चरणों का पालन करें।

  1. क्यूटी स्रोत कोड डाउनलोड करें।

  2. QtAndroidWebViewController.java में कोड अपडेट करें। यह वर्ग ~/Qt/5.10.0/Src/qtwebview/src/jar/src/org/qtproject/qt5/android/view पर स्थित है। आंतरिक वर्ग QtAndroidWebChromeClient पर निम्न फ़ंक्शन जोड़ें।

    @ ओवरराइड सार्वजनिक शून्य पर पैरामिशनरक्वेट (अनुमति अनुरोध अनुरोध) { request.grant (request.getResources()); }

  3. अपने एंड्रॉइड एसडीके के आधार पर आपको एंड्रॉइड के पुराने संस्करणों के लिए टिप्पणी/बदलें बहिष्कृत कार्यों की आवश्यकता हो सकती है। एंड्रॉइड के नए संस्करणों के अनुसार QtAndroidWebViewClient में कुछ विधियों को बदल सकते हैं।

  4. फिर आयात परियोजना ~/क्यूटी/5.10.0/SRC/qtwebview अपने क्यूटी निर्माता में, आप

  5. पर निर्भर करता है (यदि आप कुछ निर्माण मुद्दों मिल) के मुद्दों को हल करने के लिए कुछ जावा ज्ञान की आवश्यकता हो सकती आपके बिल्ड फ़ोल्डर पथ सेटिंग्स, सफल बिल्ड प्रोजेक्ट पथ build_folder/jarQtAndroidWebView.jar, QtAndroidWebView-bundled.jar में दो जार उत्पन्न करेगा।

  6. पथ ~/Qt/5.10.0/android_armv7/jar/ में जार बदलें।

  7. अब अपनी मूल परियोजना का पुनर्निर्माण (स्वच्छ निर्माण), जो वेबव्यू का उपयोग कर रहा है और समस्या हल हो गई है।

    नोट: पथ क्यूटी डाउनलोड पथ और ऑपरेटिंग सिस्टम के आधार पर बदल सकता है, लेकिन निर्मित जार को किसी भी सिस्टम (जावा जार के रूप में) पर बदला जा सकता है।

    यदि क्यूटी अगली रिलीज में इस मुद्दे को हल करता है तो हम अपडेट किए गए जार को प्रतिस्थापित कर सकते हैं।

संबंधित मुद्दे