2015-04-09 25 views
7

I programma negli ultimi anni ad Android e mi chiedo qualcosa: come rilevare quando l'utente fa uno screenshot? Voglio che quando l'utente cattura uno screenshot, passiamo alla prossima attività. Ho provato il metodo di intercettazione di un evento ma c'è un problema: quando il dispositivo entra nel sonno, ad esempio, viene intercettato un evento. Hai una soluzione per intercettare solo l'evento dello screenshot o ignorare altri eventi?Rileva uno screenshot Android

Grazie per il vostro aiuto!

risposta

12

Non esiste alcun oggetto Broadcast diretto per dirti che è stata scattata una schermata. Alcune persone here discutono le possibili opzioni per farlo (come è fatto su Snapchat). Una possibile opzione sarebbe quella di utilizzare FileObserver.

+1

Ho provato questo metodo di intercettazione di un evento ma c'è un problema: quando il dispositivo entra nel sonno, ad esempio, viene intercettato un evento. Hai una soluzione per intercettare solo l'evento dello screenshot o ignorare altri eventi? – Nachding

+2

Stai pensando a Intenti. Hai un elenco di tutti [qui] (http://developer.android.com/reference/android/content/Intent.html#ACTION_PICK) Ma sfortunatamente non ce n'è uno per il rilevamento degli screenshot. Si dovrebbe cercare [FileObserver] (http://developer.android.com/reference/android/os/FileObserver.html) come menzionato sul collegamento reddit. Non posso garantire che funzioni, ma l'idea sarebbe di osservare la cartella in cui sono salvati gli screenshot. – EscapeArtist

7

Ecco il mio trucco per ricevere una notifica quando viene catturato uno screenshot.

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

} 

provata su OnePlus 2 e Moto E.

Aggiornamento:

Questo, infine, non ha funzionato per me e ho finito per usare un ContentObserver sul tipo screenshot di voci.

+1

codice ur funziona ma come ottenere il percorso dello screenshot? – Varma460

+0

In teoria, ciò che puoi fare è impostare un osservatore nella cartella degli screenshot e ogni volta che questo evento si innesca, ottieni l'elenco dei file e vedi l'ultimo file creato che dovrebbe essere il tuo file di screenshot. –

+0

Dove si inserisce questo codice @UditShah – MizAkita

Problemi correlati