Android में स्क्रीन कैप्चर को कैसे रोकें


118

क्या Android एप्लिकेशन में स्क्रीन रिकॉर्डिंग को रोकना संभव है?

मैं एक Android सिक्योर एप्लीकेशन विकसित करना चाहता हूं। इसमें मुझे स्क्रीन रिकॉर्डिंग सॉफ़्टवेयर का पता लगाने की ज़रूरत है जो पृष्ठभूमि को चला रहे हैं और उन्हें मार रहे हैं। मैंने स्क्रीनशॉट को रोकने के लिए SECURE FLAG का उपयोग किया है। लेकिन मुझे नहीं पता कि एंड्रॉइड स्क्रीन के वीडियो कैप्चरिंग को भी रोकना संभव है। मुझे स्क्रीन कैप्चरिंग (वीडियो / स्क्रीनशॉट) को रोकने का तरीका बताएं।


8
- आपको यह याद रखना चाहिए कि सामग्री को चुराने के लिए हमेशा स्क्रीन पर एक कैमरा लगाया जा सकता है - DRM क्षेत्र में उपयोग की जाने वाली कुछ तकनीकें हैं, लेकिन वे बहुत जटिल हैं और मुझे वास्तव में नहीं पता कि हुड के नीचे क्या चल रहा है
Shai Levy

9
@ShaiLevy बताती है कि अवधारणा को आमतौर पर एनालॉग होल en.wikipedia.org/wiki/Analog_hole कहा जाता है जो मीडिया ट्रांसमिशन के निष्क्रिय सुरक्षा छेद को स्पष्ट करता है।
गुस्रिड

जवाबों:


126

मैं यह कहने जा रहा हूं कि समर्थित साधनों के माध्यम से किसी भी एंड्रॉइड ऐप की स्क्रीन / वीडियो कैप्चर को पूरी तरह से रोकना संभव नहीं है। लेकिन अगर आप केवल सामान्य एंड्रॉइड डिवाइस के लिए इसे ब्लॉक करना चाहते हैं , तो SECURE FLAG पर्याप्त है।

1) सुरक्षित ध्वज सामान्य स्क्रीनशॉट और वीडियो कैप्चर दोनों को ब्लॉक करता है।

इस लिंक पर प्रलेखन यह भी कहता है कि

विंडो फ्लैग: विंडो की सामग्री को सुरक्षित मानते हैं, इसे स्क्रीनशॉट में प्रदर्शित होने से रोकते हैं या गैर-सुरक्षित डिस्प्ले पर देखा जा सकता है।

उपरोक्त समाधान निश्चित रूप से आपके ऐप के वीडियो को कैप्चर करने से रोकता है

इसका जवाब यहां देखें ।

2) स्क्रीन सामग्री को कैप्चर करने के वैकल्पिक साधन हैं।

किसी रूट किए गए डिवाइस पर या SDK का उपयोग करके किसी अन्य एप्लिकेशन की स्क्रीन को कैप्चर करना संभव हो सकता है,

जो दोनों आपको या तो इसे अवरुद्ध करने या इसकी सूचना प्राप्त करने का कोई मौका नहीं देते हैं।

उदाहरण के लिए: एसडीके के माध्यम से आपके फोन की स्क्रीन को आपके कंप्यूटर पर मिरर करने के लिए सॉफ्टवेयर मौजूद है और इसलिए स्क्रीन कैप्चर सॉफ्टवेयर का उपयोग आपके ऐप द्वारा अनदेखा किया जा सकता है।

इसका जवाब यहां देखें ।

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

11
या एक बस हाथ में कैमरे के साथ छवि पर क्लिक कर सकते हैं।
रविंदर पायल

68

बस इस लाइन को जोड़ें:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

अपने setContentView()तरीके से पहले ।


11
प्रश्न: [उद्धरण] मैंने SECURE FLAG का उपयोग किया है [unquote] आपका "उत्तर": [उद्धरण] आप FLAG_SECURE का उपयोग कर सकते हैं [unqote] क्या आप यहाँ समस्या का समाधान कर सकते हैं?
डी जूल 20'15

नमस्ते, मैं एक वेब आधारित पोर्टल एप्लिकेशन विकसित कर रहा हूं। उपयोगकर्ता इस पोर्टल तक पहुंचने के लिए किसी भी प्रकार के ब्राउज़रों का उपयोग कर सकते हैं। इस पोर्टल के उपयोगकर्ताओं को मोबाइल उपकरणों का उपयोग करते समय स्क्रीनशॉट नहीं लेना चाहिए। क्या मैं वेब एप्लिकेशन के लिए एक ही सावधानियां (etWindow ()। SetFlags (LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE) का उपयोग कर सकता हूं)। क्या यह आईओएस के लिए काम करता है? यदि मैं उसी प्रकार की सावधानियों का उपयोग कर सकता हूं, तो मुझे इस लाइन को कहां से कॉल करना चाहिए?
फेरदा-ओज़देमीर-सोनमेज़

24

स्क्रीन कैप्चर को अक्षम करने के लिए:

onCreate()विधि में कोड की निम्नलिखित पंक्ति जोड़ें :

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                           WindowManager.LayoutParams.FLAG_SECURE);

स्क्रीन कैप्चर सक्षम करने के लिए:

के लिए खोजें LayoutParams.FLAG_SECUREऔर कोड की पंक्ति को हटा दें।


12

जावा उपयोगकर्ताओं के लिए इस लाइन को अपने ऊपर लिखें setContentView(R.layout.activity_main);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

कोटलिन उपयोगकर्ताओं के लिए

window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

कोटलिन के लिए, संदर्भ के आधार पर, यह होना चाहिए window?.set...क्योंकि डायलॉग्स पर, आपको नहीं पता कि क्या आप एक विंडो रखने जा रहे हैं।
मार्टिन मार्कोसिनी

1
मूल प्रश्न पहले ही कह चुके हैं कि उन्होंने सुरक्षित ध्वज का उपयोग किया है और आपका उत्तर सुरक्षित ध्वज का उपयोग करना है। यह वास्तव में पोस्ट किए गए प्रश्न का उत्तर नहीं देता है।
सुबारू ताशीरो ५

10

ऐसा लगता है कि आप जानते हैं कि अपने ऐप से स्क्रीनशॉट को कैसे निष्क्रिय करना है और उस पर आपकी मदद करने वाले अन्य उत्तर हैं। लेकिन मैं आपको कुछ महत्वपूर्ण जानकारी देने की कोशिश करूंगा जो आपको कोई नहीं दे रहा है।

1) आपके पास एक ऐप नहीं हो सकता है जो स्क्रीनशॉट (फोटो / वीडियो) लेने से 100% सुरक्षित है । एंड्रॉइड में स्क्रीनशॉट लेने का कोई आधिकारिक तरीका नहीं है। यदि कोई ऐप स्क्रीन रिकॉर्ड कर रहा है, तो उसे कुछ गैर-समर्थित तरीकों (या तो एसडीके को रूट करना या उपयोग करना) का उपयोग करना होगा।

अगर आप रेकॉर्ड स्क्रीन तक रूट एक्सेस का उपयोग कर रहे हैं तो आपके पास किसी ऐप को ब्लॉक करने की बहुत कम गुंजाइश है।

2) किसी ने भी इस मुद्दे का उल्लेख नहीं किया, लेकिन उपयोग करते समय बहुत सावधान रहें WindowManager.LayoutParams.FLAG_SECURE। यह कई उपकरणों (जैसे सैमसंग गैलेक्सी एसीई, जैसे जीटी-एस 5830) में सत्यापित किया गया है, कि यह पूरे दृश्य को तराशा जाता है। ऐशे ही,

यहां छवि विवरण दर्ज करें

कृपया इस तरह की जाँच करें,

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}

यह पूरी तरह से आईसीएस उपकरणों पर काम करता है, इसलिए वहां कोई समस्या नहीं है।

3) मुझे यह भी पता चला कि एंड्रॉइड 4.3 जैसे नए उपकरणों पर भी, स्क्रीन को घुमाए जाने पर यह एनीमेशन समस्याओं का कारण बनता है। कृपया इस बग रिपोर्ट की जाँच करें।


28
आपको वोट पाने के लिए अन्य लोगों के जवाबों को कॉपी और पेस्ट नहीं करना चाहिए। और एक संदर्भ भी जोड़ें जहां से आपने अपना उत्तर कॉपी किया है। stackoverflow.com/a/11121897/5437621
mrid

आपका उत्तर कॉपी और पेस्ट है, कृपया किसी के उत्तर की कॉपी और पेस्ट न करें। आपने नीचे दिए गए लिंक से इस उत्तर की प्रतिलिपि बनाई है। stackoverflow.com/a/111297/5437621
अब्दुल बासित ऋषि

9

आप अपने ऐप को डिवाइस / प्रोफाइल के मालिक और कॉल के रूप में बना सकते हैं setScreenCaptureDisabled()। से डॉक्स , इस एपीआई निम्नलिखित है:

public void setScreenCaptureDisabled (ComponentName व्यवस्थापक, बूलियन अक्षम) API स्तर 21 में जोड़ा गया

स्क्रीन कैप्चर को अक्षम किया गया है या नहीं यह सेट करने के लिए डिवाइस / प्रोफ़ाइल स्वामी द्वारा कॉल किया जाता है। स्क्रीन कैप्चर को डिसेबल करने से कंटेंट को डिस्प्ले डिवाइस पर दिखाए जाने से भी रोकता है जिसमें सुरक्षित वीडियो आउटपुट नहीं है। सुरक्षित सतहों और सुरक्षित डिस्प्ले के बारे में अधिक जानकारी के लिए FLAG_SECURE देखें।

कॉलिंग डिवाइस एडमिन डिवाइस या प्रोफाइल का मालिक होना चाहिए। यदि ऐसा नहीं है, तो एक सुरक्षा अपवाद फेंक दिया जाएगा। पैरामीटर्स व्यवस्थापक किस DeviceAdminReceiver के साथ यह अनुरोध जुड़ा हुआ है। अक्षम कि ​​क्या स्क्रीन कैप्चर अक्षम है या नहीं।

वैकल्पिक रूप से आप MDM (मोबाइल डिवाइस मैनेजमेंट) पार्टनर ऐप बन सकते हैं । डिवाइस को नियंत्रित करने के लिए उनके MDM पार्टनर ऐप्स को अतिरिक्त API प्रदान करते हैं। उदाहरण के लिए सैमसंग अपने एमडीएम भागीदारों को डिवाइस पर स्क्रीन रिकॉर्डिंग को नियंत्रित करने के लिए एपीआई प्रदान करता है।

वर्तमान में यह एकमात्र तरीका है जिससे आप स्क्रीन कैप्चर प्रतिबंधों को लागू कर सकते हैं।


9

इसे इस्तेमाल करे:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

3
प्रश्न: [उद्धरण] मैंने SECURE FLAG का उपयोग किया है [unquote] आपका "उत्तर": [उद्धरण] आप FLAG_SECURE का उपयोग कर सकते हैं [unqote] क्या आप यहाँ समस्या का समाधान कर सकते हैं?
डी जूल 20'15

विंडो फ्लैग: विंडो की सामग्री को सुरक्षित मानते हैं, इसे स्क्रीनशॉट में प्रदर्शित होने से या गैर-सुरक्षित डिस्प्ले पर देखने से रोकते हैं। सुरक्षित सतहों और सुरक्षित डिस्प्ले के बारे में अधिक जानकारी के लिए FLAG_SECURE देखें। लगातार मूल्य: 8192 (0x00002000) यहाँ से अधिक पढ़ें डेवलपर
जीतू पीएस

कृपया हमारे सुधारों को वापस
लाकर

8

मैंने उन सभी उत्तरों को देखा जो केवल एक गतिविधि के लिए उपयुक्त हैं, लेकिन मेरा समाधान है जो गतिविधि में किसी भी कोड को जोड़े बिना सभी गतिविधियों के लिए स्क्रीनशॉट को ब्लॉक कर देगा। सबसे पहले एक कस्टम एप्लिकेशन क्लास बनाएं और एक जोड़ें registerActivityLifecycleCallbacks। इसे अपने मेनिफेस्ट में पंजीकृत करें।

MyApplicationContext.class

public class MyApplicationContext extends Application {
    private  Context context;
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        setupActivityListener();
    }

    private void setupActivityListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {

            }
            @Override
            public void onActivityPaused(Activity activity) {

            }
            @Override
            public void onActivityStopped(Activity activity) {
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }



}

प्रकट

 <application
        android:name=".MyApplicationContext"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

क्या यह सभी मामलों में काम करता है?
गोपालन आर्क

मैंने अपने प्रोजेक्ट की कोशिश की तब इसने सभी गतिविधियों के लिए काम किया। @ गोपालन
जीके मोहम्मद एमोन


2

मैंने इस समाधान का उपयोग ऐप को बैकग्राउंड में जाने पर स्क्रीन कैप्चर को बंद करते समय मैन्युअल स्नैपशॉट की अनुमति देने के लिए किया था, आशा है कि यह मदद करता है।

@Override
protected void onResume() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
    super.onResume();
}

@Override
protected void onPause() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    super.onPause();
}

0

फोटो स्क्रीनशॉट के बारे में, FLAG_SECURE रूट किए गए डिवाइस पर काम नहीं कर रहा है।

लेकिन अगर आप स्क्रीनशॉट फ़ाइल की निगरानी करते हैं, तो आप मूल फ़ाइल प्राप्त करने से रोक सकते हैं।

यह एक कोशिश करो ।

1. एंड्रॉइड रिमोट सेवा के साथ मॉनिटरिंग स्क्रीनशॉट (फाइल मॉनिटर)
2. मूल स्क्रीनशॉट छवि को हटा दें।
3. बिटमैप उदाहरण वितरित करें ताकि आप संशोधित कर सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.