কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে অ্যাপ ব্যাকগ্রাউন্ডে যাওয়ায় স্ক্রিনশট বাধা দেওয়া

স্ক্রিনশট বাধা দেওয়া (FLAG_SECURE)

WindowManager.LayoutParams.FLAG_SECURE ফ্ল্যাগ সেট করলে উইন্ডোর কন্টেন্ট স্ক্রিনশট, স্ক্রিন রেকর্ডিং, এবং রিসেন্ট অ্যাপস প্রিভিউতে দেখানো বন্ধ হয়। এটি সেনসিটিভ ডেটা (পাসওয়ার্ড, ব্যাংকিং অ্যাপ) সুরক্ষার জন্য ব্যবহার করা হয়।

উদাহরণ

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

ধাপ ২: লেআউট 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/parent"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center"
    android:orientation="vertical">
    <TextView
        android:id="@+id/openYoutube"
        android:text="Open youtube application"
        android:textSize="20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

ধাপ ৩: জাভা কোড (src/MainActivity.java)

package com.example.andy.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // FLAG_SECURE সেট করুন setContentView() এর আগে
        getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE
        );
        
        setContentView(R.layout.activity_main);
    }
}

FLAG_SECURE-এর প্রভাব

  • ❌ স্ক্রিনশট নেওয়া যায় না (কালো/ব্ল্যাংক ইমেজ)
  • ❌ স্ক্রিন রেকর্ডিং ব্লক হয়
  • ❌ রিসেন্ট অ্যাপস-এ প্রিভিউ ব্লার/কালো দেখায়
  • ❌ কাস্টম ROM-এ স‌کুইন্ডশট/স্মার্ট সিলেক্ট ব্লক হয়

নির্দিষ্ট উইন্ডো/ডায়ালগের জন্য

// শুধু নির্দিষ্ট ডায়ালগের জন্য
Dialog dialog = new Dialog(this);
dialog.getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_SECURE,
    WindowManager.LayoutParams.FLAG_SECURE
);

// অ্যাক্টিভিটির onResume/onPause-এ টগল করুন
@Override
protected void onPause() {
    super.onPause();
    getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
}

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

সীমাবদ্ধতা ও বিবেচনা

  • রুট করা ডিভাইসে বাইপাস করা সম্ভব
  • এমুলেটরে কাজ নাও করতে পারে
  • Accessibility সার্ভিসগুলো আপসেট হতে পারে
  • ব্যবহারকারীর অভিজ্ঞতা বাধা দেয় (শেয়ারিং, রেকর্ডিং)
  • শুধু সেনসিটিভ স্ক্রিনে (লগইন, পেমেন্ট) ব্যবহার করুন

বিকল্প: কাস্টম স্ক্রিনশট ক্যালব্যাক (API 14+)

// শুধু কলব্যাক পেতে (ব্লক করবে না)
getWindow().setCallback(new Window.Callback() {
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        if (!hasFocus) {
            // অ্যাপ ফোকাস হারালো - সম্ভবত স্ক্রিনশট/রিসেন্টস
        }
    }
});
  1. অ্যান্ড্রয়েড অ্যাপে ক্যামেরা ব্যবহার করার পদ্ধতি

  2. Android-এ View-এর ব্যাকগ্রাউন্ড কালার এনিমেট করার পদ্ধতি

  3. অ্যাপ স্ক্রিনশট ব্লক করলে অ্যান্ড্রয়েডে স্ক্রিনশট নেওয়ার উপায়

  4. আইফোনে ছবি তোলার সময় নোটিফিকেশন ব্লক করার পদ্ধতি