Advertisement
Guest User

SaveScreenshots.java

a guest
May 8th, 2011
783
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.51 KB | None | 0 0
  1. package com.ribomation.droidAtScreen;
  2.  
  3. import com.ribomation.droidAtScreen.cmd.*;
  4. import com.ribomation.droidAtScreen.dev.AndroidDevice;
  5. import com.ribomation.droidAtScreen.dev.AndroidDeviceListener;
  6. import com.ribomation.droidAtScreen.dev.AndroidDeviceManager;
  7. import com.ribomation.droidAtScreen.gui.ApplicationFrame;
  8. import com.ribomation.droidAtScreen.gui.DeviceFrame;
  9. import org.apache.log4j.Logger;
  10.  
  11. import java.io.File;
  12. import java.io.LineNumberReader;
  13. import java.io.InputStreamReader;
  14. import java.io.IOException;
  15. import java.io.InputStream;
  16. import java.util.*;
  17. import java.util.prefs.BackingStoreException;
  18. import java.util.prefs.Preferences;
  19.  
  20. import java.awt.image.BufferedImage;
  21. import java.text.DecimalFormat;
  22.  
  23. import javax.imageio.ImageIO;
  24.  
  25. /**
  26.  * Main entry point of this application
  27.  * Syntax:
  28.  * java -cp DroidScreen.jar com.ribomation.droidAtScreen.SaveScreenshots --adb "<path to adb>" --device "<device id>"
  29.  *
  30.  * @user jens
  31.  * @date 2010-jan-17 11:00:39
  32.  */
  33. public class SaveScreenshots implements AndroidDeviceListener, Runnable
  34. {
  35.     private Logger                          log = Logger.getLogger(SaveScreenshots.class);
  36.     private AndroidDeviceManager            deviceManager;
  37.     private Map<String, DeviceFrame>        devices = new HashMap<String, DeviceFrame>();
  38.     private List<AndroidDeviceListener>     deviceListeners = new ArrayList<AndroidDeviceListener>();
  39.     private String adbPath;
  40.     private String deviceId;
  41.     private long interval;
  42.     private long startName;
  43.     private AndroidDevice currentDevice;
  44.     private Thread thread;
  45.     private boolean stopped;
  46.     private String prefix;
  47.  
  48.     public static void main(String[] args) throws Exception
  49.     {
  50.         SaveScreenshots app = new SaveScreenshots(args);
  51.     app.start();
  52.  
  53.     // wait for the stop signal
  54.     LineNumberReader lnr = new LineNumberReader(new InputStreamReader(System.in));
  55.    
  56.     String line;
  57.     do{
  58.         System.out.println("Type \"q\" to exit.");
  59.         line = lnr.readLine();
  60.        
  61.         // check to see if "quit" was passed in
  62.         if(line != null){
  63.         line = line.trim();
  64.         if("q".equals(line)){
  65.             System.out.println("Starting shutdown");
  66.             break;
  67.         }else{
  68.             System.out.println("Invalid command ["+line+"]: please enter \"quit\" to exit.");
  69.         }
  70.         }
  71.     }while(line != null);
  72.  
  73.     // stop the tag listener
  74.     app.stop();
  75.     }
  76.    
  77.  
  78.     public void start()
  79.     {
  80.     thread = new Thread(this);
  81.     thread.start();
  82.     }
  83.  
  84.     public void stop()
  85.     {
  86.     stopped = true;
  87.     }
  88.  
  89.     public SaveScreenshots(String[] args)
  90.     {
  91.     interval = -1;
  92.     deviceId = null;
  93.     adbPath = null;
  94.     currentDevice = null;
  95.     stopped = false;
  96.     startName = 1;
  97.     prefix = "";
  98.         parseArgs(args);
  99.         initAndroid();
  100.     }
  101.  
  102.     private void parseArgs(String[] args) {
  103.         //log.debug("parseArgs: " + Arrays.toString(args));
  104.     if(args.length > 0){
  105.         for(int i=0;i<args.length;i++){
  106.         if("--adb".equals(args[i])){
  107.             ++i;
  108.             if(i<args.length) adbPath = args[i];
  109.         }else if("--device".equals(args[i])){
  110.             ++i;
  111.             if(i<args.length) deviceId = args[i];
  112.         }else if("--interval".equals(args[i])){
  113.             ++i;
  114.             if(i<args.length) interval = Long.parseLong(args[i]);
  115.         }else if("--start".equals(args[i])){
  116.             ++i;
  117.             if(i<args.length) startName = Long.parseLong(args[i]);
  118.         }else if("--prefix".equals(args[i])){
  119.             ++i;
  120.             if(i<args.length) prefix = args[i] + ".";
  121.         }else if("--help".equals(args[i])){
  122.             System.out.println("Usage: \r\n");
  123.             System.out.println("java -jar DroidScreen.jar --adb \"<path to adb.exe>\" --device \"<android device id>\" --prefix \"<image file prefix>\" --interval <interval in milliseconds between images>\r\n");
  124.             System.out.println("For example: java -jar DroidScreen.jar --adb \"C:\\projects\\Android\\android-sdk-windows-1.5_r1\\platform-tools\\adb.exe\" --device \"HT097P800223\" --prefix \"ss1\" --interval 1000");
  125.             System.exit(0);
  126.         }
  127.         }
  128.     }
  129.     }
  130.  
  131.     private void initAndroid() {
  132.         log.debug("initAndroid");
  133.         deviceManager = new AndroidDeviceManager();
  134.         deviceManager.addAndroidDeviceListener(this);
  135.     deviceManager.setAdbExecutable(new File(adbPath));
  136.     }
  137.  
  138.     public void run() {
  139.         log.debug("run");
  140.     BufferedImage image;
  141.     DecimalFormat df = new DecimalFormat("0000000000");
  142.     AndroidDevice nowDevice;
  143.     File lastFile;
  144.     long current = startName;
  145.     if(interval > 0 && adbPath != null && deviceId != null){
  146.         while(!stopped){
  147.         try{ Thread.sleep(interval); }catch(InterruptedException ie){}
  148.         if(stopped) break;
  149.         nowDevice = currentDevice;
  150.         if(nowDevice != null){
  151.             // save a screen shot
  152.             image = nowDevice.getScreenShot();
  153.            
  154.             // save it
  155.             lastFile = new File(prefix + df.format(current)+".png");
  156.             ++current;
  157.             try{
  158.             ImageIO.write(image, "png", lastFile);
  159.             }catch(Exception e1){
  160.             System.err.println("Exception writing file: "+e1.getMessage());
  161.             e1.printStackTrace();
  162.             }
  163.         }
  164.         }
  165.     }
  166.     deviceManager.close();
  167.     }
  168.  
  169.     // --------------------------------------------
  170.     // AndroidDeviceManager
  171.     // --------------------------------------------
  172.  
  173.     @Override
  174.     public void connected(final AndroidDevice dev) {
  175.         log.debug("connected: dev="+dev+" ["+dev.getName()+"]");
  176.     if(dev.getName().equals(deviceId)) currentDevice = dev;
  177.     }
  178.  
  179.     @Override
  180.     public void disconnected(final AndroidDevice dev) {
  181.         log.debug("disconnected: dev="+dev);
  182.  
  183.     if(dev.getName().equals(deviceId)) currentDevice = null;
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement