2015-08-27 12 views
3

В моем приложении для Android мне нужно определить событие захвата экрана. Как мне это сделать?Как поймать событие захвата экрана на устройствах Android?

+0

* Я не нашел ответа на него * * -> Лучше, если вы его ищете, прежде чем найти его. Я лично рекомендую поисковую систему Google, которую я использовал, чтобы найти много дубликатов этого вопроса без усилий (просто скопируйте/вставляйте заголовок, действительно). – 2Dee

+0

@ 2Dee Я попытался с Google, прежде чем создавать новый вопрос в переполнении стека. И на этом сайте я нашел тот же вопрос, но у него нет ответа. – TOP

ответ

0

Я использовал этот код в своем приложении, и он отлично работает. Он уведомляет, когда снимок сделан. Я тестировал его на OnePlus 1, Nexus 6P, Moto G3. Никаких проблем на каких-либо устройствах.

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); 
} 
+0

Это может повлиять на производительность, потому что все действия выполняются в главной теме. Чтобы избежать этого, используйте что-то вроде HandlerThread для выполнения на фоне (http://stackoverflow.com/a/29389627/5222184) – qpator