Cách ngăn Chụp màn hình trong Android


118

Có thể ngăn ghi màn hình trong Ứng dụng Android không?

Tôi muốn phát triển một Ứng dụng bảo mật của Android. Trong đó tôi cần phát hiện phần mềm quay màn hình đang chạy nền và giết chúng. Tôi đã sử dụng CỜ AN TOÀN để ngăn ảnh chụp màn hình. Nhưng tôi không biết có thể ngăn quay Video của Màn hình Android hay không. Hãy cho tôi biết cách ngăn chụp màn hình (video / ảnh chụp màn hình).


8
- Bạn nên nhớ người ta luôn có thể chĩa camera vào màn hình để xem trộm nội dung - Có một số kỹ thuật được sử dụng trong lĩnh vực DRM nhưng chúng khá phức tạp và tôi thực sự không biết chuyện gì đang xảy ra
Shai Levy 19/02

9
Khái niệm mà @ShaiLevy giải thích, thường được gọi là Analog Hole en.wikipedia.org/wiki/Analog_hole , giải thích lỗ hổng bảo mật không thể xâm nhập của truyền phương tiện.
gusridd

Câu trả lời:


126

Tôi sẽ nói rằng không thể ngăn chặn hoàn toàn việc quay màn hình / quay video của bất kỳ ứng dụng Android nào thông qua các phương tiện được hỗ trợ. Nhưng nếu bạn chỉ muốn chặn nó cho các thiết bị Android bình thường , CỜ AN TOÀN là rất quan trọng.

1) Cờ an toàn chặn cả chụp ảnh màn hình và quay video bình thường.

Ngoài ra, tài liệu tại liên kết này nói rằng

Cờ cửa sổ: coi nội dung của cửa sổ là an toàn, ngăn nội dung của cửa sổ xuất hiện trong ảnh chụp màn hình hoặc bị xem trên màn hình không an toàn.

Giải pháp trên chắc chắn sẽ ngăn các ứng dụng quay video ứng dụng của bạn

Xem câu trả lời tại đây .

2) Có các phương tiện thay thế để chụp nội dung màn hình.

Có thể chụp màn hình của một ứng dụng khác trên thiết bị đã root hoặc thông qua SDK,

mà cả hai đều ít hoặc không có khả năng bạn chặn nó hoặc nhận được thông báo về nó.

Ví dụ: tồn tại phần mềm để phản chiếu màn hình điện thoại của bạn với máy tính thông qua SDK và do đó, phần mềm chụp ảnh màn hình có thể được sử dụng ở đó mà ứng dụng của bạn không thể phát hiện được.

Xem câu trả lời tại đây .

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

11
hoặc người ta có thể chỉ cần nhấp vào hình ảnh bằng máy ảnh cầm tay.
Ravinder Payal

68

Chỉ cần thêm dòng này:

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

Trước khi setContentView()phương pháp của bạn .


11
Câu hỏi: [quote] Tôi đã sử dụng CỜ AN TOÀN [unquote] "Câu trả lời" của bạn: [quote] Bạn có thể sử dụng FLAG_SECURE [unqote] Bạn có thể phát hiện vấn đề ở đây không?
2Dee

Xin chào, tôi đang phát triển một ứng dụng cổng thông tin dựa trên web. Người dùng có thể sử dụng bất kỳ loại trình duyệt nào để truy cập cổng này. Người sử dụng cổng thông tin này không nên chụp ảnh màn hình khi họ đang sử dụng thiết bị di động. Tôi có thể sử dụng các biện pháp phòng ngừa tương tự không (etWindow (). SetFlags (LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);) cho ứng dụng web. Nó có hoạt động cho IOS không? Nếu tôi có thể sử dụng cùng một loại biện pháp phòng ngừa, tôi nên gọi đường dây này ở đâu?
Ferda-Ozdemir-Sonmez

23

Để tắt tính năng Chụp màn hình:

Thêm dòng mã sau vào onCreate()phương thức:

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

Để bật Chụp màn hình:

Tìm LayoutParams.FLAG_SECUREvà xóa dòng mã.


12

Đối với người dùng Java, hãy viết dòng này phía trên setContentView(R.layout.activity_main);

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

Đối với người dùng kotlin

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

đối với kotlin, tùy thuộc vào ngữ cảnh, điều đó nên xảy ra window?.set...vì trên Hộp thoại, bạn không biết liệu mình có sắp có một Cửa sổ hay không.
Martin Marconcini

1
Câu hỏi ban đầu đã nói rằng họ đã sử dụng cờ an toàn và câu trả lời của bạn là sử dụng cờ an toàn. Điều này không thực sự trả lời câu hỏi được đăng.
Subaru Tashiro

10

Có vẻ như bạn biết cách tắt ảnh chụp màn hình từ ứng dụng của mình và có những câu trả lời khác giúp bạn về điều đó. Nhưng tôi sẽ cố gắng cung cấp cho bạn một số thông tin quan trọng mà không ai cung cấp cho bạn.

1) Bạn không thể có một ứng dụng an toàn 100% khỏi việc chụp ảnh màn hình (ảnh / video). Không có cách chính thức để chụp ảnh màn hình trong Android. Nếu một ứng dụng đang ghi lại màn hình thì ứng dụng đó phải đang sử dụng một số phương pháp không được hỗ trợ (root hoặc sử dụng SDK).

Có rất ít phạm vi để bạn chặn một ứng dụng nếu ứng dụng đó đang sử dụng quyền truy cập root để ghi lại màn hình.

2) Không ai đề cập đến vấn đề này ở đây, nhưng hãy rất cẩn thận trong khi sử dụng WindowManager.LayoutParams.FLAG_SECURE. Nó đã được xác minh trong nhiều thiết bị (như trên Samsung Galaxy ACE, chẳng hạn như GT-S5830), rằng điều này làm cho toàn bộ chế độ xem bị xáo trộn. Như thế này,

nhập mô tả hình ảnh ở đây

Hãy đặt một tấm séc như thế này,

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

Nó hoạt động hoàn hảo trên các thiết bị ICS, vì vậy không có vấn đề gì ở đó.

3) Tôi cũng phát hiện ra rằng ngay cả trên các thiết bị mới hơn như Android 4.3, điều này gây ra sự cố hoạt ảnh khi xoay màn hình. Vui lòng kiểm tra báo cáo lỗi này.


28
bạn không nên chỉ sao chép và dán câu trả lời của người khác để nhận phiếu bầu. Và cũng thêm tham chiếu đến nơi bạn đã sao chép câu trả lời của mình. stackoverflow.com/a/11121897/5437621
mrid

câu trả lời của bạn là sao chép và dán, vui lòng không sao chép và dán câu trả lời của một số người. bạn đã sao chép câu trả lời này từ liên kết đề cập bên dưới. stackoverflow.com/a/11121897/5437621
Abdul Basit Rishi

9

Bạn có thể đặt ứng dụng của mình làm chủ sở hữu thiết bị / hồ sơ và gọi điện setScreenCaptureDisabled(). Từ tài liệu , api này thực hiện những việc sau:

public void setScreenCaptureDisabled (Quản trị viên ComponentName, boolean bị vô hiệu hóa) Đã thêm vào API cấp 21

Được chủ sở hữu thiết bị / hồ sơ gọi để đặt có tắt tính năng chụp màn hình hay không. Tắt tính năng chụp màn hình cũng ngăn nội dung hiển thị trên các thiết bị hiển thị không có đầu ra video an toàn. Xem FLAG_SECURE để biết thêm chi tiết về bề mặt an toàn và màn hình an toàn.

Quản trị viên thiết bị gọi điện phải là chủ sở hữu thiết bị hoặc hồ sơ. Nếu không, một ngoại lệ bảo mật sẽ được ném ra. Quản trị viên tham số DeviceAdminReceiver mà yêu cầu này được liên kết với. bị vô hiệu hoá Cho dù tính năng chụp màn hình có bị tắt hay không.

Ngoài ra, bạn có thể trở thành ứng dụng đối tác MDM (Quản lý thiết bị di động) .OEMs cung cấp các API bổ sung cho các ứng dụng đối tác MDM của họ để điều khiển thiết bị. Ví dụ: samsung cung cấp api để điều khiển ghi màn hình trên thiết bị cho các đối tác MDM của họ.

Hiện tại đây là cách duy nhất bạn có thể thực thi các hạn chế chụp màn hình.


9

Thử cái này:

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

3
Câu hỏi: [quote] Tôi đã sử dụng CỜ AN TOÀN [unquote] "Câu trả lời" của bạn: [quote] Bạn có thể sử dụng FLAG_SECURE [unqote] Bạn có thể phát hiện vấn đề ở đây không?
2Dee

Cờ cửa sổ: coi nội dung của cửa sổ là an toàn, ngăn nội dung của cửa sổ xuất hiện trong ảnh chụp màn hình hoặc bị xem trên màn hình không an toàn. Xem FLAG_SECURE để biết thêm chi tiết về các bề mặt an toàn và màn hình an toàn. Giá trị hằng số: 8192 (0x00002000) Đọc thêm từ đây developer.android.com/reference/android/view/...
Jithu PS

Xin đừng thay đổi nội bài của bạn bằng cách lăn lại những cải tiến của chúng tôi
FelixSFD

8

Tôi đã thấy tất cả các câu trả lời chỉ thích hợp cho một hoạt động nhưng có giải pháp của tôi sẽ chặn ảnh chụp màn hình cho tất cả các hoạt động mà không cần thêm bất kỳ mã nào vào hoạt động. Trước hết, hãy tạo một lớp Ứng dụng tùy chỉnh và thêm mộtregisterActivityLifecycleCallbacks Sau đó đăng ký nó trong tệp kê khai của bạn.

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) {
            }
        });
    }



}

Rõ ràng

 <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">

nó hoạt động trong mọi trường hợp?
gopalanrc

Tôi đã thử dự án của mình sau đó nó hoạt động cho tất cả các hoạt động. @gopalanrc
Gk Mohammad Emon

2

Theo hướng dẫn chính thức này , bạn có thể thêm WindowManager.LayoutParams.FLAG_SECUREvào bố cục cửa sổ của mình và nó sẽ không cho phép ảnh chụp màn hình.


2

Tôi đã sử dụng giải pháp này để cho phép chụp nhanh thủ công trong ứng dụng trong khi không cho phép chụp màn hình khi ứng dụng ở chế độ nền, hy vọng nó sẽ hữu ích.

@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

về ảnh chụp màn hình, FLAG_SECURE thiết bị gốc không hoạt động.

nhưng nếu bạn theo dõi tệp ảnh chụp màn hình, bạn có thể ngăn việc lấy tệp gốc.

thử này một .

1. giám sát ảnh chụp màn hình (màn hình tập tin) với dịch vụ từ xa android
2. xóa ảnh chụp màn hình gốc.
3. cung cấp phiên bản bitmap để bạn có thể sửa đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.