2012-12-10 9 views
6

Quando si utilizza uiautomator, takeScreenshot(File storePath) restituisce sempre false, non importa quale parametro passo in.Perché di uiautomator Android UIDevice # takeScreenshot tornare sempre false sull'emulatore

Ho cercato di dare uno new File(dir_name, file_name) o new File(file_name), nessuno dei due funziona (ovviamente mkdir prima se il dir_name non esiste).

Ogni volta solo return false e /data/local/tmp/ sull'emulatore è vuoto.

BTW, non penso che sia un problema di autorizzazione, dal momento che provare lo stesso dumpWindowHierarchy potrebbe generare un file di dump lì.

Grazie in anticipo per il vostro aiuto.

+0

come aggiungere uiautomator al nostro progetto, ho bisogno di prendere screenshot per favore aiutami ... – kalandar

+0

@kalandar si prega di seguire passaggi su questo li nk: http://developer.android.com/tools/testing/testing_ui.html è abbastanza dettagliato. Fondamentalmente per l'impostazione del progetto, è necessario aggiungere il supporto per la lib di JUnit3 e uiautomator.jar + android.jar. –

+0

grazie @Jing li .... lo farò – kalandar

risposta

7

Se si utilizza l'emulatore per eseguire i test, è necessario attivare "Usa GPU host" nella configurazione AVD. Dopo questo cambiamento ha funzionato per me.

Se si verifica ancora un problema, è possibile provare screencap. È uno strumento a linea di comando per prendere screenshot. Funziona in entrambe le impostazioni dell'emulatore. Per salvare screenshot in data percorso eseguire:

Process process = Runtime.getRuntime().exec("screencap <path>"); 
process.waitFor(); 

Usa /data/local/tmp per evitare problemi con il permesso. Puoi anche usare la SD Card dir. È asincrono quindi aspetta fino al termine del processo con waitFor(). Riconoscerà il formato di output desiderato per estensione del file fornito.

Oppure si può ottenere PNG in InputStream (non c'è bisogno di aspettare):

Process process = Runtime.getRuntime().exec("screencap -p"); 
InputStream output = new BufferedInputStream(process.getInputStream()); 

È possibile omettere -p se si desidera ottenere il file in formato JPEG. Gli screenshot JPEG sono più grandi, ma ci vuole meno tempo per ottenerli.

metodo
+0

grazie per la tua risposta, risolve il mio problema dopo aver abilitato "Usa GPU host". Sì, la funzione screenshot di solito è basata sull'approccio di rendering. E la mia opinione è, come se la funzione integrata funzioni, non dovremmo usare la lib esterna per fare la stessa cosa. –

+1

C'è un modo per farlo usando il metodo takeScreeshot di UiDevice di Android? Sto provando questo sul dispositivo ma anche lì fallisce e dà risultati falsi sempre. La directory viene creata ma rimane vuota dopo la chiamata a prendere il metodo Screeshot. – sarabhai05

3

Il takeScreenshot() è applicabile da 4.2 e superiore androide dispositivi versione

Se la versione del dispositivo è appropriato, quindi utilizzare il seguente pezzo di codice

File path = new File("/sdcard/filename.png"); 
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH); 
    } 

Possiamo vedere il file seguendo comando

$ adb shell ls -l /sdcard/name-of-file 
+0

non funziona più con Uiautomator 2.0 –

Problemi correlati