2015-04-09 50 views
7

Tôi lập trình trong những năm gần đây cho Android và tôi tự hỏi điều gì đó: Cách phát hiện khi người dùng chụp ảnh màn hình? Tôi muốn rằng khi người dùng chụp ảnh màn hình, chúng tôi sẽ chuyển sang hoạt động tiếp theo. Tôi đã thử phương pháp chặn sự kiện nhưng có sự cố: khi thiết bị chuyển sang chế độ ngủ, ví dụ: sự kiện bị chặn. Bạn có một giải pháp để chặn chỉ sự kiện ảnh chụp màn hình hoặc bỏ qua các sự kiện khác?Phát hiện ảnh chụp màn hình Android

Cảm ơn sự giúp đỡ của bạn!

Trả lời

12

Không có mục đích phát sóng trực tiếp nào để cho bạn biết rằng ảnh chụp màn hình đã được chụp. Một số người here thảo luận về các tùy chọn có thể thực hiện (như đã thực hiện trên Snapchat). Một tùy chọn có thể là sử dụng FileObserver.

+1

Tôi đã thử phương pháp chặn sự kiện này nhưng có sự cố: khi thiết bị chuyển sang chế độ ngủ, ví dụ: sự kiện bị chặn. Bạn có một giải pháp để chặn chỉ sự kiện ảnh chụp màn hình hoặc bỏ qua các sự kiện khác? – Nachding

+2

Bạn đang suy nghĩ về Intents. Bạn có một danh sách tất cả trong số họ [ở đây] (http://developer.android.com/reference/android/content/Intent.html#ACTION_PICK) Nhưng tiếc là không có một để phát hiện ảnh chụp màn hình. Bạn nên xem [FileObserver] (http://developer.android.com/reference/android/os/FileObserver.html) như đã đề cập trên liên kết reddit. Tôi không thể bảo đảm nó hoạt động, nhưng ý tưởng sẽ là quan sát thư mục nơi các ảnh chụp màn hình được lưu vào. – EscapeArtist

7

Đây là hack của tôi để được thông báo khi chụp màn hình.

public void detectScreenShotService(final Activity activity){ 

    final Handler h = new Handler(); 
    final int delay = 3000; //milliseconds 
    final ActivityManager am=(ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE); 

    h.postDelayed(new Runnable(){ 
     public void run(){ 

      List<ActivityManager.RunningServiceInfo> rs=am.getRunningServices(200); 

      for(ActivityManager.RunningServiceInfo ar:rs){ 
       if(ar.process.equals("com.android.systemui:screenshot")){ 
        Toast.makeText(activity,"Screenshot captured!!",Toast.LENGTH_LONG).show(); 
       } 
      } 
      h.postDelayed(this, delay); 
     } 
    }, delay); 

} 

Thử nghiệm trên OnePlus 2 và Moto E.

Cập nhật:

này cuối cùng đã không làm việc cho tôi và tôi đã kết thúc bằng một ContentObserver vào loại ảnh chụp màn hình của mục.

+1

mã ur hoạt động nhưng làm thế nào để có được đường dẫn của ảnh chụp màn hình? – Varma460

+0

Về mặt lý thuyết, những gì bạn có thể làm là đặt sát vào thư mục ảnh chụp màn hình và bất cứ khi nào sự kiện này gây nên, có được danh sách các tập tin và xem các tập tin được tạo ra trước đó nên tập tin ảnh chụp màn hình của bạn. –

+0

Bạn đặt mã này ở đâu @UditShah – MizAkita

Các vấn đề liên quan