एंड्रॉइड में FLAG_SECURE से स्क्रीन रिकॉर्डिंग/कैप्चर रोकना
यह उदाहरण दिखाता है कि `WindowManager.LayoutParams.FLAG_SECURE` फ्लैग का उपयोग करके ऐप की स्क्रीन को रिकॉर्डिंग, स्क्रीनशॉट और कास्टिंग से कैसे सुरक्षित किया जाता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट XML
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/rlMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="स्क्रीन रिकॉर्डिंग सुरक्षित ऐप"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="इस स्क्रीन का स्क्रीनशॉट या रिकॉर्डिंग नहीं लिया जा सकता"
android:textSize="16sp" />
</LinearLayout>
चरण 3: MainActivity में FLAG_SECURE सेट करें
MainActivity.java:
package app.com.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ⚡ महत्वपूर्ण: setContentView() से पहले कॉल करें!
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
setContentView(R.layout.activity_main);
}
}
🔑 FLAG_SECURE क्या करता है?
| फीचर | प्रभाव |
|---|---|
| स्क्रीनशॉट | ब्लॉक - काली/खाली इमेज सेव होती है |
| स्क्रीन रिकॉर्डिंग | ब्लॉक - काला वीडियो रिकॉर्ड होता है |
| रिमोट डिस्प्ले/कास्टिंग | ब्लॉक - कास्टिंग डिवाइस पर काला दिखता है |
| हाल के ऐप्स प्रीव्यू | ब्लर/काला थंबनेल दिखता है |
| Accessibility सेवाएं | कुछ सेवाएं कंटेंट नहीं पढ़ पातीं |
⚠️ सीमाएं और विचार
- केवल वर्तमान विंडो: फ्लैग केवल उस एक्टिविटी की विंडो पर लागू होता है जहां सेट किया गया है
- डायलॉग/पॉपअप: अलग विंडो वाले डायलॉग के लिए अलग से सेट करना पड़ता है
- सिस्टम UI: स्टेटस बार, नेविगेशन बार प्रभावित नहीं होते
- रूट/कस्टम ROM: रूटेड डिवाइस पर बायपास संभव है
- एक्सेसिबिलिटी: दृष्टिबाधित उपयोगकर्ताओं की सेवाएं प्रभावित हो सकती हैं
🎯 विशिष्ट विंडो के लिए (डायलॉग, बॉटम शीट)
// AlertDialog के लिए
AlertDialog dialog = builder.create();
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
dialog.show();
// BottomSheetDialog के लिए
BottomSheetDialog dialog = new BottomSheetDialog(this);
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
📱 पूरी ऐप के लिए (BaseActivity में)
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// सभी एक्टिविटीज के लिए सुरक्षा सक्षम करें
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
super.onCreate(savedInstanceState);
}
}
चरण 4: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
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">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
🧪 टेस्ट करना
- ऐप इंस्टॉल करें और खोलें
- प्ले स्टोर से कोई स्क्रीन रिकॉर्डर ऐप इंस्टॉल करें (जैसे AZ Screen Recorder)
- रिकॉर्डिंग शुरू करें
- ऐप पर नेविगेट करें
- रिकॉर्डिंग रोकें और वीडियो देखें - ऐप का भाग काला/खाली होगा
- स्क्रीनशॉट लेने का प्रयास करें (पावर + वॉल्यूम डाउन) - काली इमेज सेव होगी
💡 वैकल्पिक: MediaProjection API से रिकॉर्डिंग डिटेक्ट करना
यदि आप रिकॉर्डिंग डिटेक्ट करके प्रतिक्रिया देना चाहते हैं (ब्लॉक नहीं):
// MediaProjectionManager से एक्टिव रिकॉर्डिंग चेक करें MediaProjectionManager mpm = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE); // नोट: सीधे डिटेक्शन API नहीं है, लेकिन कॉलबैक रजिस्टर कर सकते हैं
ऐप चलाएं
डिवाइस कनेक्ट करें, Run पर क्लिक करें। किसी भी स्क्रीन रिकॉर्डर से रिकॉर्ड करने पर ऐप का कंटेंट काला दिखाई देगा।