ऐप्लिकेशन, किसी दूसरे ऐप्लिकेशन से चलाए जा रहे वीडियो या ऑडियो को रिकॉर्ड कर सकता है. इस तरह
ऐप्लिकेशन को
MediaProjection
टोकन
सही तरीके से. इस पेज पर इसका तरीका बताया गया है. यहां यह भी दिखाया गया है कि डिवाइस का एडमिन इस सुविधा को कैसे बंद कर सकता है
किसी भी स्क्रीन स्नैपशॉट को रिकॉर्ड करने की सुविधा और कोई ऑडियो ऐप्लिकेशन
दूसरे ऐप्लिकेशन को उसमें चलने वाले कॉन्टेंट को रिकॉर्ड करने से रोक सकता है.
MediaProjection
टोकन को मैनेज करने का तरीका
MediaProjection
API की मदद से, ऐप्लिकेशन को MediaProjection
टोकन मिलता है. इससे, ऐप्लिकेशन को स्क्रीन पर दिख रहे कॉन्टेंट या ऑडियो को कैप्चर करने का एक बार का ऐक्सेस मिलता है. Android OS उपयोगकर्ता से यह जानकारी मांगता है
अनुमति दें.
ओएस, क्विक सेटिंग यूज़र इंटरफ़ेस (यूआई) में चालू MediaProjection
टोकन दिखाता है. साथ ही, उपयोगकर्ताओं को किसी भी समय टोकन का ऐक्सेस वापस लेने की अनुमति देता है. जब ऐसा होता है, तो
सेशन से जुड़े वर्चुअल डिसप्ले या ऑडियो स्ट्रीम पाना बंद कर दिया जाता है
मीडिया स्ट्रीम. आपके ऐप्लिकेशन को सही तरीके से जवाब देना चाहिए. ऐसा न करने पर, आपका ऐप्लिकेशन काम करता रहेगा
बिना आवाज़ वाले वीडियो या ब्लैक वीडियो स्ट्रीम को रिकॉर्ड करना होगा.
टोकन खो जाने की समस्या को मैनेज करने के लिए, MediaProjection
पर कॉलबैक रजिस्टर करें
इंस्टेंस
registerCallback
विधि से शामिल किया जाता है और रिकॉर्डिंग शुरू करने के बाद
onStop
तरीका को कॉल किया जाता है.
ज़्यादा जानकारी के लिए, मीडिया प्रोजेक्शन देखें.
वीडियो कैप्चर करें
किसी डिवाइस की स्क्रीन को रीयल टाइम में कैप्चर करने और उसे SurfaceView पर दिखाने के लिए, Media Projection API का इस्तेमाल करने का तरीका जानने के लिए, ScreenCapture सैंपल ऐप्लिकेशन देखें.
स्क्रीन रिकॉर्डिंग को रोकने के लिए, DevicePolicyManager
का इस्तेमाल किया जा सकता है. एंटरप्राइज़ खातों (Android for Work) के लिए, एडमिन setScreenCaptureDisabled तरीके का इस्तेमाल करके, वर्क प्रोफ़ाइल के लिए Assistant का डेटा इकट्ठा करने की सुविधा बंद कर सकता है.
कोडलैब (कोड बनाना सीखना) किसी ऐप्लिकेशन के बिना Android डिवाइसों को मैनेज करना स्क्रीनशॉट के लिए अनुमति न देने का तरीका दिखाता है.
ऑडियो चलाना
AudioPlaybackCapture API को Android 10 में लॉन्च किया गया था. इस एपीआई की मदद से, ऐप्लिकेशन दूसरे ऐप्लिकेशन से चल रहे ऑडियो को कॉपी कर सकते हैं. यह सुविधा स्क्रीन कैप्चर का एनालॉग है, लेकिन ऑडियो के लिए. मुख्य इस्तेमाल का उदाहरण यह है ऐसे स्ट्रीमिंग ऐप्लिकेशन के लिए है जो गेम की आवाज़ को कैप्चर करना चाहते हैं.
ध्यान दें कि AudioPlaybackCapture API का इस्तेमाल करने से, उस ऐप्लिकेशन के इंतज़ार का समय नहीं बढ़ता जिसका ऑडियो रिकॉर्ड किया जा रहा है.
कैप्चर ऐप्लिकेशन बनाना
सुरक्षा और निजता के लिए, वीडियो चलाने के दौरान कैप्चर करने की सुविधा पर कुछ पाबंदियां हैं. ऑडियो रिकॉर्ड करने के लिए, ऐप्लिकेशन को ये ज़रूरी शर्तें पूरी करनी होंगी:
- ऐप्लिकेशन के पास
RECORD_AUDIO
अनुमति होनी चाहिए. - ऐप्लिकेशन में,
MediaProjectionManager.createScreenCaptureIntent()
से दिखाया गया प्रॉम्प्ट दिखना चाहिए. साथ ही, उपयोगकर्ता को इसकी अनुमति देनी होगी. - कैप्चर करने और चलाने वाले ऐप्लिकेशन, एक ही उपयोगकर्ता प्रोफ़ाइल में होने चाहिए.
किसी दूसरे ऐप्लिकेशन का ऑडियो कैप्चर करने के लिए, आपके ऐप्लिकेशन को
AudioRecord
ऑब्जेक्ट
और जोड़ें एक
AudioPlaybackCaptureConfiguration
करना है. यह तरीक़ा अपनाएँ:
AudioPlaybackCaptureConfiguration
बनाने के लिए,AudioPlaybackCaptureConfiguration.Builder.build()
को कॉल करें.setAudioPlaybackCaptureConfig
को कॉल करके, कॉन्फ़िगरेशन कोAudioRecord
को पास करें.
ऑडियो कैप्चर को कंट्रोल करना
आपका ऐप्लिकेशन यह कंट्रोल कर सकता है कि वह किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है और किस तरह का कॉन्टेंट रिकॉर्ड कर सकता है ऐप्लिकेशन के अलग-अलग तरह के ऐप्लिकेशन अपना खुद का प्लेबैक रिकॉर्ड कर सकते हैं.
ऑडियो कॉन्टेंट के हिसाब से कैप्चर को सीमित करना
इनका इस्तेमाल करके, ऐप्लिकेशन यह तय कर सकता है कि कौनसा ऑडियो कैप्चर किया जा सकता है तरीका:
- किसी खास तरह के इस्तेमाल को कैप्चर करने की अनुमति देने के लिए, AudioPlaybackCaptureConfiguration.addMatchingUsage() को
AUDIO_USAGE
पास करें. एक से ज़्यादा उपयोग तय करने के लिए तरीके को कई बार कॉल करें. - इन कामों के लिए, ऑडियो प्लेबैक चलाया जाने वाला कॉन्फ़िगरेशन.एक्सक्लूज़() के लिए
AUDIO_USAGE
को पास करें कैप्चर करने से मना कर सके. एक से ज़्यादा इस्तेमाल के बारे में बताने के लिए, इस तरीके को कई बार कॉल करें. - सिर्फ़ किसी खास यूआईडी वाले ऐप्लिकेशन को कैप्चर करने के लिए, AudioPlaybackCaptureConfiguration.addMatchingUid() को यूआईडी पास करें. एक से ज़्यादा यूआईडी तय करने के लिए, तरीके को कई बार कॉल करें.
- इस यूआईडी को कैप्चर करने की अनुमति न देने के लिए, ऑडियो प्लेबैक जांचेंकॉन्फ़िगरेशन.एक्सक्लूड() में यूआईडी पास करें. एक से ज़्यादा यूआईडी तय करने के लिए, तरीके को कई बार कॉल करें.
ध्यान दें कि addMatchingUsage()
और excludeUsage()
तरीकों का इस्तेमाल नहीं किया जा सकता
हैं बेमिसाल. आपको इनमें से किसी एक को चुनना होगा. इसी तरह, addMatchingUid()
और excludeUid()
का इस्तेमाल नहीं किया जा सकता
ट्रैक करने में मदद मिलती है.
दूसरे ऐप्लिकेशन से स्क्रीन कैप्चर करने पर पाबंदी लगाना
किसी ऐप्लिकेशन को कॉन्फ़िगर किया जा सकता है, ताकि दूसरे ऐप्लिकेशन उसका ऑडियो कैप्चर न कर सकें. किसी ऐप्लिकेशन से आने वाले ऑडियो को सिर्फ़ तब कैप्चर किया जा सकता है, जब वह ऐप्लिकेशन इन ज़रूरी शर्तों को पूरा करता हो:
इस्तेमाल
ऑडियो बनाने वाले प्लेयर को इसके इस्तेमाल को USAGE_MEDIA
,
USAGE_GAME
या
USAGE_UNKNOWN
पर सेट करना होगा.
कैप्चर नीति
प्लेयर की कैप्चर नीति AudioAttributes.ALLOW_CAPTURE_BY_ALL
होनी चाहिए. इससे दूसरे ऐप्लिकेशन, वीडियो चलाने की सुविधा को कैप्चर कर सकते हैं. ऐसा कई तरीकों से किया जा सकता है:
- सभी खिलाड़ियों को कैप्चर करने की सुविधा चालू करने के लिए, ऐप्लिकेशन की
manifest.xml
फ़ाइल मेंandroid:allowAudioPlaybackCapture="true"
शामिल करें. - कॉल करके सभी प्लेयर पर कैप्चर करने की सुविधा भी चालू की जा सकती है
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. - किसी प्लेयर का इस्तेमाल करते समय, उस प्लेयर पर नीति सेट की जा सकती है
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. (अगर आपAAudio
कॉल का इस्तेमाल कर रहे हैंAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
इन ज़रूरी शर्तों को पूरा करने पर, गेमप्ले में खिलाड़ी के बोले गए किसी भी ऑडियो को कैप्चर किया जा सकता है.
सिस्टम कैप्चर की सुविधा बंद करना
ऊपर बताई गई सुरक्षाएं कैप्चर करने वाली जिन सुविधाओं के बारे में ऊपर बताया गया है वे सिर्फ़ ऐप्लिकेशन पर लागू होती हैं. Android सिस्टम के कॉम्पोनेंट, डिफ़ॉल्ट रूप से वीडियो चलाने की जानकारी कैप्चर कर सकते हैं.
इनमें से कई कॉम्पोनेंट को Android वेंडर और सहायता सुविधाएं पसंद के मुताबिक बनाती हैं
जैसे, सुलभता और कैप्शन. इसलिए, हमारा सुझाव है कि ऐप्लिकेशन, सिस्टम को अपने वीडियो चलाने की जानकारी दें. बहुत कम मामलों में, जब आपके पास
अपने ऐप्लिकेशन के प्लेबैक को सिस्टम से कैप्चर करवाना चाहते हैं, तो कैप्चर नीति को
ALLOW_CAPTURE_BY_NONE
.
रनटाइम के दौरान नीति सेट करना
आप कैप्चर करने का समय बदलने के लिए, AudioManager.setAllowedCapturePolicy()
पर कॉल कर सकते हैं
ऐप्लिकेशन के इस्तेमाल के दौरान, नीति से जुड़ी नीति सेट करें. अगर कोई MediaPlayer या AudioTrack चल रहा है
तो कॉल करने पर ऑडियो पर कोई असर नहीं पड़ता. आपको इसे बंद करके फिर से खोलना होगा
नीति में बदलाव को लागू करने के लिए प्लेयर या ट्रैक.
नीति = मेनिफ़ेस्ट + AudioManager + AudioAttributes
कैप्चर करने की नीति कई जगहों पर तय की जा सकती है. इसलिए, यह समझना ज़रूरी है कि लागू होने वाली नीति का पता कैसे लगाया जाता है.
कैप्चर करने से जुड़ी सबसे ज़्यादा पाबंदी वाली नीति हमेशा लागू होती है. उदाहरण के लिए, ऐसा ऐप्लिकेशन जिसका
मेनिफ़ेस्ट में शामिल है setAllowedCapturePolicy="false"
कभी भी नॉन-सिस्टम की अनुमति नहीं देगा
ऑडियो कैप्चर करने वाले ऐप्लिकेशन, भले ही AudioManager#setAllowedCapturePolicy
सेट हो
ALLOW_CAPTURE_BY_ALL
के लिए. इसी तरह, अगर
AudioManager#setAllowedCapturePolicy
को ALLOW_CAPTURE_BY_ALL
पर सेट किया गया है. साथ ही,
मेनिफ़ेस्ट, setAllowedCapturePolicy="true"
सेट करता है, लेकिन मीडिया प्लेयर
AudioAttributes
को इनके साथ बनाया गया था:
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
और उसके बाद
इस मीडिया प्लेयर को गैर-सिस्टम ऐप्लिकेशन से ऐक्सेस नहीं किया जा सकेगा.
नीचे दी गई टेबल में मेनिफ़ेस्ट एट्रिब्यूट के असर के बारे में खास जानकारी दी गई है. साथ ही, लागू नीति:
allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_system | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
सही | कोई भी ऐप्लिकेशन | सिर्फ़ सिस्टम के लिए | कोई कैप्चर नहीं |
गलत | सिर्फ़ सिस्टम | सिर्फ़ सिस्टम के लिए | कोई कैप्चर नहीं |