Android: Enviar imágenes por webservice

Descargar APP

Vamos a desarrollar una app fácil, sencilla y para toda la familia en la que usaremos diversas tecnologías y funciones específicas de Android, así como librerías externas.

Necesitaremos una librería de Apache (descargar) que incluye API’s y métodos para intercambiar información mediante el protocolo http, así como enviar datos y ficheros como un formulario Html común para recogerlo en un servidor, en nuestro caso PHP.

Vayamos al grano, primero crearemos un proyecto Android, en este caso adaptado a una versión mínima de Android-8 y máxima 17. Una vez creado el proyecto crearemos una carpeta llamada “libs” en la que extraemos el Jar “httpmime-4.2.4.jar” ubicado en la carpeta libs del zip descargado anteriormente. Para agregarlo al proyecto en las propiedades del proyecto->Librerias->Añadir Jar, desplegamos nuestro proyecto y la carpeta libs, ahí encontraremos nuestro deseado Jar.

Antes de empezar con el código es aconsejable configurar en Android-manifest.xml y añadirle permisos de internet, puede darnos muchos dolores de cabeza más adelante a la hora de depurar.

[xml]
<uses-permission android:name=”android.permission.INTERNET”/>
[/xml]

La pantalla principal constará de un botón que ejecute la cámara y una imagen que será la foto que realicemos. El xml del layout quedaría así

[xml]

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:paddingBottom=”@dimen/activity_vertical_margin”
android:paddingLeft=”@dimen/activity_horizontal_margin”
android:paddingRight=”@dimen/activity_horizontal_margin”
android:paddingTop=”@dimen/activity_vertical_margin”
tools:context=”.MainActivity” >

<TextView
android:id=”@+id/textView1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentTop=”true”
android:layout_centerHorizontal=”true”
android:layout_marginTop=”20dp”
android:text=”@string/hello_world” />

<Button
android:id=”@+id/button1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/textView1″
android:layout_centerHorizontal=”true”
android:layout_marginTop=”21dp”
android:text=”Camara” />

<ImageView
android:id=”@+id/imageView1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:layout_centerVertical=”true”
/>

</RelativeLayout>

[/xml]

Bueno pues ya tenemos la vista de la aplicación, ahora démoslo funcionalidad. Vayamos a MainActivity o java inicial de la aplicación.

El flujo de la app sería el siguiente:

  • Clicamos el botón y lanzamos un intent para ejecutar la cámara
  • Realizamos una foto y posteriormente la guardamos mediante la clase MediaScannerConnectionClient, la mostramos en la imageView del layout
  • Lanzamos un proceso en segundo plano para subir la foto mientras que mostramos un dialog de carga
  • Una vez terminada la subida al servidor, mostramos un alert “Foto subida”

En el método onCreate de la clase principal creamos la ruta y nombre donde guardaremos la foto

[java]
aleatorio = new Double(Math.random() * 100).intValue();
foto = Environment.getExternalStorageDirectory() + “/imagen”+ aleatorio +”.jpg”;
[/java]

Le damos vida al botón creando una variable de tipo Button y la vincularemos al botón creado en el layout, posteriormente le creamos el evento onClick()

[java]
btnCamara = (Button) findViewById(R.id.button1);
btnCamara.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri output = Uri.fromFile(new File(foto));
intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivityForResult(intent, TAKE_PICTURE);
}
});
[/java]

Analicemos el contenido del onClick(). Crearemos un Intent para acceder a la cámara y una dirección donde guardaremos la foto en caso de realizarse, con el putExtra le asignamos la salida a la dirección dada. Lanzamos el intent, TAKE_PICTURE es una constante que he definido con el valor de ‘1’, de esta manera lanzamos la intención de tomar una foto, con un 2 tendríamos la intención de recoger la foto de una biblioteca. El startActivity lo hemos cambiado por startActivityForResult porque lanzaremos el intent para que vuelva con resultados, en este caso una imagen.

Ahora declaramos el onActivityResult para obtener el resultado de la camara y gestionar el uso como queramos, veamos el código

[java]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setImageBitmap(BitmapFactory.decodeFile(foto));

File file = new File(foto);
if (file.exists()) {
UploaderFoto nuevaTarea = new UploaderFoto();
nuevaTarea.execute(foto);
}
else
Toast.makeText(getApplicationContext(), “No se ha realizado la foto”, Toast.LENGTH_SHORT).show();

}
[/java]

Como vemos, instanciamos un objeto de imagen para asignarle la foto que realicemos con la cámara mediante el método setImageBitmap al que le tenemos que pasar una imagen codificada en mapa de bits, usaremos para esto BitmapFactory.decodeFile(rutaFoto);

Posteriormente creamos un objeto de tipo foto para saber si se ha guardado y existe esa foto, haremos unas cosas u otras en función de esa sentencia. En el caso de no haber foto (porque el usuario ha dado en el botón ‘atrás’) lanzamos un mensaje de que no se ha realizado la foto, por el contrario, si se ha realizado, procederemos a subir la imagen a un servidor que nos está esperando.

Para este procedimiento he recurrido a los procesos, ejecutaremos en segundo plano la subida del fichero mientras decimos al usuario que espere un momento.

Decidí usar la clase AsyncTask en vez de los threads y handlers porque me parece mucho más organizado y claro, pero cada uno que use lo que más acostumbrado esté. La clase AsyncTask de Android precisa de 3 parámetros

[java]
class UploaderFoto extends AsyncTask{…}
[/java]

  • Params:  Datos que pasaremos al comenzar la tarea
  • Progress: Parámetros que necesitaremos para actualizar la UI.
  • Result: Dato que devolveremos una vez terminada la tarea.

Además es necesario implementar el método doInBackground, y opcionalmente los métodos onPreExecute y onPostExecute, su ejecución es obvia 🙂

Veamos como nos quedaría la clase y la analizamos:

[java]
class UploaderFoto extends AsyncTask{

ProgressDialog pDialog;
String miFoto = “”;

@Override
protected Void doInBackground(String… params) {
miFoto = params[0];
try {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost(“http://tuservidor.com/upload.php”);
File file = new File(miFoto);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody foto = new FileBody(file, “image/jpeg”);
mpEntity.addPart(“fotoUp”, foto);
httppost.setEntity(mpEntity);
httpclient.execute(httppost);
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage(“Subiendo la imagen, espere.” );
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setCancelable(true);
pDialog.show();
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pDialog.dismiss();
}
}
[/java]

Que no cunda el pánico, vayamos por partes, usaremos 2 constantes una de tipo Dialog para el dialogo de progreso de subida de la foto y otra que guarda la ruta absoluta de la foto. La clase no devuelve nada pero sí recibe parámetros de String, solamente le recibirá la ruta absoluta de la foto que llegará recien horneada del método execute de una instancia de esta clase.

El método doInBackground hace casi todo, con HttpClient tenemos una clase para realizar comunicaciones HTTP, con HttpPost, podemos enviar información de tipo POST y con MultipartEntity, podemos enviar información y archivos. Básicamente el flujo de este apartado es, creo un cliente de comunicación en el que enviaré información por post a una URL y encapsularé datos y ficheros para ser enviados desde ese cliente. Todo esto debe estar dentro de una transacción try-catch.

Pero antes de que se ejecute doInBackground, se ejecuta onPreExecute y despues de doInBackground se ejecuta onPostExecute. Es muy importante saber este flujo al igual que con el método doInBackground NO podemos tocar la interfaz de usuario (UI principal), pero sí con el resto de eventos, por lo tanto en el onPreExecute lanzamos el dialog y con el onPostExecute lo quitamos.

En el servidor PHP recojemos la imagén de la siguiente manera

[php]
$ruta = “fotos/” . basename( $_FILES[‘fotoUp’][‘name’]);
if(move_uploaded_file($_FILES[‘fotoUp’][‘tmp_name’], $ruta))
chmod (“uploads/”.basename( $_FILES[‘fotoUp’][‘name’]), 0644);
[/php]

Ahora a probar suerte y depurar.

El código completo:

[java collapse=”true”]
public class MainActivity extends Activity {

Button btnCamara;
private String foto;
private static int TAKE_PICTURE = 1;
double aleatorio = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Para crear un nombre diferente para la foto
aleatorio = new Double(Math.random() * 100).intValue();
foto = Environment.getExternalStorageDirectory() + “/imagen”+ aleatorio +”.jpg”;

btnCamara = (Button) findViewById(R.id.button1);
btnCamara.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri output = Uri.fromFile(new File(foto));
intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivityForResult(intent, TAKE_PICTURE); // 1 para la camara, 2 para la galeria
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setImageBitmap(BitmapFactory.decodeFile(foto));

File file = new File(foto);
if (file.exists()) {
UploaderFoto nuevaTarea = new UploaderFoto();
nuevaTarea.execute(foto);
}
else
Toast.makeText(getApplicationContext(), “No se ha realizado la foto”, Toast.LENGTH_SHORT).show();

}

class UploaderFoto extends AsyncTask{

ProgressDialog pDialog;
String miFoto = “”;

@Override
protected Void doInBackground(String… params) {
miFoto = params[0];
try {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost(“http://servidor.com/up.php”);
File file = new File(miFoto);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody foto = new FileBody(file, “image/jpeg”);
mpEntity.addPart(“fotoUp”, foto);
httppost.setEntity(mpEntity);
httpclient.execute(httppost);
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage(“Subiendo la imagen, espere.” );
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setCancelable(true);
pDialog.show();
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pDialog.dismiss();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

[/java]

Javier Téllez

Comments: 103

  • Adri
    14th abril 2013 9:57 am

    Hola, muchas gracias por la información, si en lugar de subir una foto, lo que quiero es mandar un archivo.xml el proceso sería el mismo?
    Gracias

      • Dante Valencia
        9th septiembre 2014 2:38 pm

        amigo una ayuda por favor… necesito mandar mi bdd al servidor, como haria eso?

    • Gustavo Garcia
      3rd marzo 2015 11:41 pm

      Hola, crees que me puedas ayudar, como le hiciste para mandar el archivo en lugar de la foto? No tengo muy claro de como hacerlo. Gracias

  • sergio
    20th abril 2013 10:36 am

    Hola ,es justo lo que necesitaba muchas gracias ,pero me gustaría saber como hacer para que la foto se tome desde mi aplicacion ,no que tenga que salir la cámara de android no se si me he explicado bien.

  • Germán Ortega
    12th mayo 2013 12:21 am

    Hola, tengo lo siguiente en el server php:

    Pero luego de ejecutar la app, después de haber puesto mi server, sigo sin recibir nada, a qué podría deberse?

    • Germán Ortega
      12th mayo 2013 12:25 am

      Olvídalo, lo acabo de resolver solo borrando las carpetas del archivo php, cosa que se cree directamente en la carpeta donde el archivo php está.

      Muchas gracias por el tutorial!

  • Pedro
    28th mayo 2013 3:40 pm

    Genial! Estoy empezando con Android y puede resultar un poco denso al principio… Gracias!

    Al seguir tu tutorial sólo me surge una duda… cuando declaro la class UploaderFoto, me salta una alerta que deber de ser parametrizada así:

    class UploaderFoto extends AsyncTask

    Y luego, aunque me sube la foto al server y me muestra el mensaje de cargando imagen, este no se cierra al terminar… Cómo te digo, no me muestra ningún error… sólo esa alerta… ¿sabes que puede estar pasando?

    Gracias!!

    • Pedro
      28th mayo 2013 3:43 pm

      disculpa, pero al enviar el comentario ha eliminado los tags, con su contenido, de la class… sería así:

      class UploaderFoto extends AsyncTask Object, Object, Object {

      Entendiéndose que entre el primer y último “Object” se abren y cierran los paréntesis angulares…

      • Pedro
        28th mayo 2013 3:56 pm

        Stoooooooop!!! Ya lo solucioné!

        Al descargar el código de tu proyecto, me fijé que al declarar la class UploaderFoto le asignas los parámetros como String, Void, Void… parámetros que no se ven en el código de la web!

        Aaaaahora sí que se cierra X) Ahora voy a que se vea la imagen en el ImageView

      • Pedro
        28th mayo 2013 3:57 pm

        No he llegado a tiempo! has sido más rápido contestando! XD

        • Pedro
          1st junio 2013 4:14 pm

          Buenas Javier!

          Después de muuucho buscar en San Google, al fin he conseguido que la imagen se visualice en el ImageView… te comento que si ejecuto el código tal y como lo tienes, no me muestra la imagen peeeero, con la siguiente modificación, sí:

          ImageView iv = (ImageView)
          findViewById(R.id.imageView1);

          /* INICIO NUEVO CODIGO */
          BitmapFactory.Options options = new
          BitmapFactory.Options();
          options.inSampleSize = 2;
          Bitmap bm = BitmapFactory.decodeFile(foto, options);
          /* FIN NUEVO CODIGO */

          iv.setImageBitmap(bm);

          Parece ser que cuando la imagen es demasiado pesada (en mi caso 2448×3264), el setImageBitmap() tiene problemas para gestionarla a la hora de mostrarla y de ahí que se deba reducir…

          Si a alguien le pasa lo mismo, que pruebe con esta modificación del código. 🙂

          • Pedro
            1st junio 2013 4:45 pm

            ..por cierto, me pasa una cosa un tanto curiosa… si capturo la foto desde la cámara y al volver a la app roto el terminal a horizontal, la visualización de la imagen del ImageViewdesaparece… tal vez vuelve a dibujarlo todo sin guardar antes lo que tiene en pantalla?

          • Pedro
            4th junio 2013 5:43 pm

            Bueno, comentarte que el tema del refresco de la activity al rotar el terminal lo he solucionado. Al tomar la foto guardo la info con SharedPreferences y luego en onRestoreInstanceState() la vuelvo a aplicar al ImageView… así la imagen es visible aunque rotes el terminal 🙂

          • jack
            6th septiembre 2013 12:03 am

            hola. tengo el mismo problema con la rotación horizontal me gustaría saber como lo solucionaste he buscado acerca del SharedPreferences ,onRestoreInstanceState()y aun no he podido solucionarlo.
            De antemano gracias por tu respuesta y también al que posteo este articulo me fue de gran utilidad.

  • Xuelo
    30th mayo 2013 3:24 pm

    DE lujo la explicación, verás estoy haciendo una aplicación en el que tiene que enviar una foto y un String lo de la foto me viene de lujo pero las dudas que tengo es en cuanto al servidor…lo monto con phpMyAdmin? la direccion del servidor hace referencia a un php y ese php se encarga de meter la imagen en una base de datos?

      • Xuelo
        30th mayo 2013 3:53 pm

        Muchas gracias por contestar tan rápido, si no es mucho código, ¿que tendría que añadir al código de arriba para enviar el String a la vez que la imagen?

  • Xuelo
    30th mayo 2013 4:13 pm

    UF me has salvado la vida!, es que es para un proyecto de fin de curso y para el día 5 tengo que tenerlo y me falta esto y poco más. Gracias de nuevo javi, al final de la tarde casi noche me pondré con esto hasta las tantas de la noche ya comentare mañana como me ha ido.

    Saludos!

      • Xuelo
        31st mayo 2013 12:10 am

        bueno la cosa no ha ido tan bien como esperaba, lo primero que he intentado es subir una foto desde tu aplicación a mi servidor local y no lo consigo, me salta la tostada (no se ha realizado la foto)¿Puede que sea algun error en la dirección del servidor? el servidor lo tengo con xampp en la carpeta htdocs tengo la carpeta “melillafix y dentro de esta la de fotos y un foto.php, dentro del foto.php está exactamente esto:

        luego la ruta que tengo en el HttpPost es: “http://localhost/melillafix/foto.php”.

        Esto por una parte lo siguiente que he intentado es fusionar el codigo responsable de subir la imagen con mi codigo para hacer la foto que es algo distinto, es este:

        mi boton tiene un Onclick”tomarfoto”

        public void tomarfoto(View v){

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, codigoIntent);
        }

        luego el onActivityForResult:

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        String carpetaDestino= getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath();

        if (resultCode == RESULT_OK && requestCode==codigoIntent) {
        try{
        Bitmap foto = (Bitmap) data.getExtras().get(“data”);
        foto.describeContents();

        Calendar fecha=(GregorianCalendar) GregorianCalendar.getInstance();

        Date d=fecha.getTime();

        String nombre=”foto-“+fecha.get(Calendar.YEAR)+”-“+(fecha.get(Calendar.MONTH)+1)+”-“+
        (fecha.get(Calendar.DAY_OF_MONTH))+”-“+ fecha.get(Calendar.HOUR_OF_DAY)+”-“+fecha.get(Calendar.MINUTE)+”-“+
        fecha.get(Calendar.SECOND)+”.jpg”;

        String completa=carpetaDestino+”/”+nombre;

        FileOutputStream salida = new FileOutputStream(completa);
        foto.compress(Bitmap.CompressFormat.JPEG, 90, salida);

        } catch (FileNotFoundException e) {

        e.printStackTrace();
        }

        }

        }

        y nada no lo consigo, desde mi punto de vista sale más rentable averiguar porque me falla tu aplicación que intentar fusionar condigo

        javi…ayudaa jaja

          • Xuelo
            31st mayo 2013 10:50 am

            madre mia esto va de mal en peor, he puesto el boton de mi camara como el tuyo, como se explica arriba y la aplicacion se me ejecuta en blanco…

            Sobre los permisos, estoy en windows lo unico que hecho es quitar la casilla de solo lectura.

            Dices que has probado mi codigo con el codigo de subir imagen, si lo puedes pegar para echarle un ojo o si quieres pasarlo por email para no poner todo el tocho de comentario, porque me esta volviendo loco la aplicación

  • Xuelo
    31st mayo 2013 11:12 am

    ok para aclarar, que el php no es mi fuerte, el otro chmod el de uploads, lo dejo? o lo borro?

      • Xuelo
        31st mayo 2013 11:26 am

        vale esto va progresando, ya me hace la foto y aparece en el imageview… pero parece que no la sube no la sube, si al segundo chmod lo pongo a 0777 me vuelve a salta la tostada de no se ha echo la foto

          • Xuelo
            31st mayo 2013 4:54 pm

            Javi mira he cambiado la ruta del codigo a htt://127.0.0.1/melillafix/index.php

            los permisos del segundo chmod los he puesto a 0755

            y siempre igual hace la foto pero nada más no muestra el mensaje de subiendo ni nada… en el logcat muestra unas cuantas cositas:

            en verde:

            Not a DRM file
            buffer returned

            en azul:

            GC_FOR_ALLOC freed 76, 2% free 8982k/9155k, paused 22ms

            en verde otra vez:

            Grow heap (frag case) to 33.368MB for 25694224-byte allocation

            luego otras dos en azul mas o menos como la de antes

            y ya luego mensajes en naranja un poco largos algunos acabados en (conection refused)

            no se ya de que puede ser estoy cambiando el servidor xampp po wampServer

          • Xuelo
            31st mayo 2013 5:43 pm

            Weeeee ha salidoo poniendo de ruta 10.0.2.2

            Mil gracias tio eres un maquina!

          • Xuelo
            31st mayo 2013 5:50 pm

            he cantado victoria muy rapido…muestra el mensaje de subiendo pero en la carpeta fotos no ha nada

          • Xuelo
            31st mayo 2013 11:02 pm

            Javi cuando puedas… despues de toda la tarde haciendo pruebas…este es el veredicto:

            en un principio solo subia las imagenes echas con la camara delantera.. con la trasera o salia no realizada o se colgaba la aplicacion, cuando sale: “Subiendo la imagen” se queda como colgao(con el circulo dando vueltas) lo digo por que tarda mucho mas de 30s porque se me bloquea el movil, al final se quita, tambien se quita si tocas en alguna parte de la pantalla que no sea el mensaje.

            El php esta asi:

            chmod(“/melillafix/fotos”, 0777);
            $ruta = “fotos/” . basename( $_FILES[‘fotoUp’][‘name’]);
            if(move_uploaded_file($_FILES[‘fotoUp’][‘tmp_name’], $ruta))
            chmod (“uploads/”.basename( $_FILES[‘fotoUp’][‘name’]), 0777);

            Mas comportamientos raros…alomejor abro la aplicación hago una foto, guardo, y no sale en el imageview ni muestra mensaje, si cierro y vuelvo abrir la app si lo hace bien…

            por ultimo la ruta que tengo ahora es la ip externa algo asi: http://27.42…../melillafix/foto.php y el movil conectado por 3Gb

            y eso es todo…muestra subiendo imagen pero en la carpeta fotos no hay nada…no se me ocurre que hacer ya…en el log no salen ya mensajes naranjas de or.apache………refused

          • Xuelo
            2nd junio 2013 10:55 pm

            Arregladoo!!

  • augusto benitez
    18th junio 2013 9:56 pm

    Hola genial tu ejemplo me podrias ayudar necesito mandar un archivo jpg a un servidor hasta ahora puedo tomar la foto con un intent

    i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(i, fotografia);

    y en un onActivityResult

    Bundle extras = data.getExtras();
    bmp = (Bitmap)extras.get(“data”);
    imagen.setImageBitmap(bmp);

    lo tengo asi para ponerle la foto en un etiqueta mi duda seria como pasar un intent data a un archivo jpg?? gracias 🙂

      • henry
        14th enero 2015 10:32 pm

        Que tal, en el caso de tomar la foto de la galeria como puedo obtener el nombre? ya que en este ejemplo el nombre es asignado desde el inicio en la variable ‘foto’ :/

        de antemano gracias, me a servido mucho el ejemplo.

  • Tarek
    1st julio 2013 4:17 pm

    Hola Javier realmente el programa es lo maximo, aunque se me hizo dificil lo de las librerias jejej, pero tengo una duda, soy algo nuevo en esto de la programacion en java y para android y quisiera saber como puedo modificar un poco la app para que pueda tomar las fotos y mandarlas al servidor automaticamente, solo pulsando un boton, y que tome por ejemplo fotos cada 3, 5 o 10 segundos hasta pulsar denuevo el mismo boton o otro para que pare 😀

  • Lorena
    16th julio 2013 11:00 am

    Hola a tod@s, he bajado el código de la aplicación y en el archivo php tengo puesto lo que tú has dicho, cambiando el nombre de la carpeta de destino. El problema es que aun bajándome la librería httpclient me da error cuando está subiendo la foto. Te dejo captura de pantalla del logcat:

    http://img280.imagevenue.com/img.php?image=969624656_logcat_122_245lo.jpg

    Estás seguro que en el php no se pone más que las 3 líneas que has puesto?

    Un saludo y gracias por la ayuda.

    • Fernando
      22nd febrero 2017 1:59 pm

      Hola Lorena, puedes compartir el codigo de este proyecto?
      Muchas gracias

  • Lorena
    17th julio 2013 7:45 am

    Hola Javier, gracias por contestar tan pronto. Uso IP numérica, pero también he usado tu página de ejemplo. Digo yo que aunque no suba foto tampoco debería cerrarme la aplicación, no?

  • Marcela
    25th julio 2013 3:10 pm

    Hola, muchas gracias por tu código…yo descargue el proy y lo importe y de una funciona, el problema que tengo es que solo me muestra la foto que tomé…es decir al parecer no entra al Asynctask! pero bueno lo que no entendía muy bien era como utilizar el httppost para envíar la foto, tu trabajas en PHP..y me preguntaba si tienes algún conocimiento de asp.net? mis servicios están en asp y no se muy bien como hacer para crear el método que me reciba la foto y la suba al servidor…o si porfavor me podrías explicar que hace el método en php..es decir como parametro lo que recibe es solo el string? de la dirección donde está la foto en la tablet? y al subirla al servidor..subiría la foto como tal verdad? de modo que se pueda ver desde la web?

    espero que me puedas contestar. Gracias por tu código.

  • Juan
    22nd agosto 2013 5:46 pm

    Buenas javier, estoy probando tu aplicación y me encuentro con el problema de que la aplicación me casca en el momento en el que intenta subir la foto (“la aplicación se ha interrumpido inesperadamente. Inténtalo de nuevo”) la aplicación está tal cual, solo he cambiado la url de ejemplo por la mia “http://192.168.1.134:8080/torrix-admin/FotosWSService”
    debuggeando he visto que da el error al intentar ejecutar la linea
    MultipartEntity mpEntity = new MultipartEntity();

    esto es lo que me sale en el log:
    08-22 19:44:02.334: E/WindowManager(25166): Activity com.example.camara.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@417936a8 that was originally added here
    08-22 19:44:02.334: E/WindowManager(25166): android.view.WindowLeaked: Activity com.example.camara.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@417936a8 that was originally added here
    08-22 19:44:02.334: E/WindowManager(25166): at android.view.ViewRootImpl.(ViewRootImpl.java:347)
    08-22 19:44:02.334: E/WindowManager(25166): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
    08-22 19:44:02.334: E/WindowManager(25166): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)

  • Mauricio
    3rd octubre 2013 4:10 pm

    Muchas gracias por el tutorial.

    A pesar de que private static int TAKE_PICTURE = 2; esta en dos, siempre llama la camara, como hago para que se valla directamente a escoger una foto de la galeria?

    Muchas gracias!

  • alexander
    3rd octubre 2013 6:17 pm

    y si quiero subir una foto y con una mesaje en un text viwe como le haria me gustaria q me respodienra esa duda muy buen tutorial saludos

  • mimo
    18th octubre 2013 3:06 pm

    Hola javier muy interesante tu tutorial pero queria preguntarte que si es la unica manera de subir ficheros al server, si no se puede sacando un Byte[] de tu File y despues el Byte[] convertirlo a string con base64?, y tambien como seria en el PHP? buen tutorial saludos!!!!

  • David
    20th octubre 2013 9:49 pm

    Hola Javier.

    Te agradezco enormemente la ayuda que me has dado al publicar esta aplicación, ya que me ha resuelto un montón de problemas.

    Ahora estoy intentando comprimir las imágenes capturadas antes de enviarlas al servidor, y como estoy empezando con Android, casi una semana y no he conseguido hacerlo.

    Te agradecería un poco mas de ayuda.

    Un saludo y gracias de antemano.

  • William
    23rd octubre 2013 7:42 pm

    Primero que todo muchas gracias por el tutorial, es claro y sencillo.
    Amigo para recoger la confirmación del servidor web que implementación se debe realizar en android?
    Muchas gracias por tu colaboración

  • Walter
    24th octubre 2013 1:13 pm

    Javier, gracias por el post, me ha servido muchísimo, pero tengo algunas dudas que no he podido subsanar. Intento leer el stream con una aplicación aspx, y tengo recurrentemente un error de dato inválido en la instrucción “FromStream”.

    System.Drawing.Image img = Bitmap.FromStream(Request.InputStream);
    img.Save(“+nombre.jpg”, ImageFormat.Jpeg);

    He visto que la longitud del stream no siempre es la misma, estaré obviando alguna función de inicializacion?

    Gracias!!!

  • Tori
    5th noviembre 2013 7:47 pm

    Muy buena explicacion, pero me podrias ayudar a adaptarlo a mi servidor?
    Estoy utilizando xampp localmente.

    En el codigo cambie la direccion a por la siguiente:
    HttpPost httppost = new HttpPost(“http://localhost/subir_foto.php”);

    El archivo subir_foto.php contiene lo siguiente:
    $ruta = “fotos/” . basename( $_FILES[‘fotoUp’][‘name’]);

    if(move_uploaded_file($_FILES[‘fotoUp’][‘tmp_name’], $ruta))
    chmod (“uploads/”.basename( $_FILES[‘fotoUp’][‘name’]), 0644);

    En mi servidor cree la carpeta fotos, que mas debo de hacer?

    • Tori
      6th noviembre 2013 7:17 pm

      Lo resolvi, desde el emulador todo funciona muy bien.
      Pero al instalar la aplicacion en mi telefono no sube la foto.

      • Tori
        7th noviembre 2013 8:31 pm

        Tienes algun tutorial de como hacer el proceso inverso?, es decir sacar imagenes del servidor y mostrarlas en android

        • Enrique RM
          17th noviembre 2013 3:56 pm

          Yo tambien estoy en eso amigo, no me sube la foto desde la aplicacion, oye comparte tu codigo PHP, porfa

  • Enrique RM
    9th noviembre 2013 9:27 pm

    Hola mi amigo, buen tutorial me gusto mucho, quisiera saber que archivo de la actualización de apache debo descargar porque aparecen varios y no se cual graciasa

  • Enrique RM
    9th noviembre 2013 11:53 pm

    Donde puedo descargar el código?

  • Enrique RM
    11th noviembre 2013 3:59 am

    Como le hago en la parte PHP?

  • Davis Sanchez
    15th noviembre 2013 7:55 pm

    muy buen tutorial me a servido mucho gracias!!!

  • Enrique Medina
    17th noviembre 2013 7:37 pm

    El codigo me compila correctamente, pero al momento de dar click en el Boton camara que tomaría la foto, sale un error que dice “desafortunadamente la camara se ha detenido”, puede alguien decirme a que se debe este error…

  • Christian
    26th noviembre 2013 1:02 pm

    Hola, yo quiero hacer eso mismo pero para alojar la foto en un webservice y no por php, como puedo hacerlo

  • Angel
    11th diciembre 2013 1:09 pm

    Hola, quiero hacer una aplicación que tomara fotos cada 5/10 min. y que las subiera directamente a un servidor. No se si es posible que la aplicación haga las fotos de manera desasistida.

    Un saludo y gracias.
    Angel

  • Leo L
    5th enero 2014 9:42 pm

    hola, necesito hacer unas aplicaciones ,me pasas tu correo en privado o me envias un email, así te puedo contactar. Gracias!

  • luis
    5th marzo 2014 8:04 pm

    Hola, cuando hago correr la aplicacion me sale el siguiente error:
    could not find class ‘org.apache.http.entity.mime.multipartentity’
    estoy usando estas versiones

    apache-mime4j-core-0.7.2.jar
    httpclient-4.2.3.jar
    httpcore-4.2.2.jar
    httpmime-4.2.3.jar
    una ayuda por favor
    Gracias

  • Javi
    9th marzo 2014 8:40 pm

    Hola!! Muy buen tutorial. Yo tengo un problema, y es que se compila y ejecuta sin ningun tipo de error, pero en mpEntity.addPart(“fotoUp”, foto); no añade nada a mpEntity, y claro, luego se ejecuta pero al estar vacio no hace nada,

    A ver si alguien me puede ayudar.
    Muchas gracias!!

  • Mauri Cabrera
    24th marzo 2014 3:51 am

    Buenas noches!! He estado usando tu codigo, todo funciona bien! al momento de subri la foto me aparece el siguienete logcat:

    03-23 23:47:22.111: W/IInputConnectionWrapper(26262): showStatusIcon on inactive InputConnection
    03-23 23:47:28.911: D/dalvikvm(26262): GC_FOR_ALLOC freed 8306K, 32% free 25853K/37864K, paused 27ms, total 29ms
    03-23 23:47:28.916: I/dalvikvm-heap(26262): Grow heap (frag case) to 36.478MB for 8294416-byte allocation
    03-23 23:47:28.941: D/dalvikvm(26262): GC_FOR_ALLOC freed 0K, 11% free 33953K/37864K, paused 22ms, total 22ms
    03-23 23:47:29.066: D/ProgressBar(26262): setProgress = 0
    03-23 23:47:29.066: D/ProgressBar(26262): setProgress = 0, fromUser = false
    03-23 23:47:29.066: D/ProgressBar(26262): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000
    03-23 23:47:29.116: W/System.err(26262): java.net.UnknownHostException: Unable to resolve host “eventoscbba.herobo.com”: No address associated with hostname
    03-23 23:47:29.121: W/System.err(26262): at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
    03-23 23:47:29.121: W/System.err(26262): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    03-23 23:47:29.121: W/System.err(26262): at java.net.InetAddress.getAllByName(InetAddress.java:214)
    03-23 23:47:29.121: W/System.err(26262): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    03-23 23:47:29.121: W/System.err(26262): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    03-23 23:47:29.121: W/System.err(26262): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    03-23 23:47:29.131: W/System.err(26262): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    03-23 23:47:29.131: W/System.err(26262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    03-23 23:47:29.131: W/System.err(26262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    03-23 23:47:29.131: W/System.err(26262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    03-23 23:47:29.131: W/System.err(26262): at com.mauric.eventoscbba.SubirMensaje$UploaderFoto.doInBackground(SubirMensaje.java:93)
    03-23 23:47:29.131: W/System.err(26262): at com.mauric.eventoscbba.SubirMensaje$UploaderFoto.doInBackground(SubirMensaje.java:1)
    03-23 23:47:29.131: W/System.err(26262): at android.os.AsyncTask$2.call(AsyncTask.java:287)
    03-23 23:47:29.131: W/System.err(26262): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    03-23 23:47:29.131: W/System.err(26262): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    03-23 23:47:29.131: W/System.err(26262): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    03-23 23:47:29.131: W/System.err(26262): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    03-23 23:47:29.136: W/System.err(26262): at java.lang.Thread.run(Thread.java:841)
    03-23 23:47:29.136: W/System.err(26262): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
    03-23 23:47:29.136: W/System.err(26262): at libcore.io.Posix.getaddrinfo(Native Method)
    03-23 23:47:29.136: W/System.err(26262): at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
    03-23 23:47:29.136: W/System.err(26262): at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
    03-23 23:47:29.136: W/System.err(26262): … 17 more
    03-23 23:47:29.181: D/ProgressBar(26262): updateDrawableBounds: left = 0
    03-23 23:47:29.181: D/ProgressBar(26262): updateDrawableBounds: top = 0
    03-23 23:47:29.181: D/ProgressBar(26262): updateDrawableBounds: right = 144
    03-23 23:47:29.181: D/ProgressBar(26262): updateDrawableBounds: bottom = 144
    03-23 23:47:29.301: E/ViewRootImpl(26262): sendUserActionEvent() mView == null

    TIENES alguna idea de porque esto pasa??
    cambie el link de la por este donde esta alojado mi servidor:
    http://eventoscbba.herobo.com/fotos/uploadpic.php
    no suben las fotos! 🙁
    AYUDAA!!!

  • fredy
    5th abril 2014 5:25 pm

    buen tutorial , bien explicado , oye , tengo mi servidor apache , con axis2 , en eclipse, como podria hacer ese metodo para recibir la imagen y guardarla en el server?

    saludos , gracias!

  • Leonardo
    2nd mayo 2014 1:14 am

    Hola, hay un detalle que no se tomo en cuenta en el codigo, pues al tomar varias fotos y subirlas a una carpeta en el servidor, el nombre de cada foto esta de forma aleatoria y hay ocasiones que vuelve a coincidir con el mismo nombre de otra foto ya tomada y por defecto no va la ultima foto sino toma la foto anterior que se encuentra en la carpeta con ese nombre y queda esa imagen, una solucion q encontre es aumentar el rango para el numero aleatorio cambié de 100 a 1 000 000 eso soluciona pero no del todo aun así existe la probabilidad remota que coincida con otro nombre, hay alguna forma de evitar esa probabilidad??

    • ranceis
      22nd julio 2014 2:19 am

      puedes generar el nombre con fecha-hora y agregarle un aleatorio

  • Mario
    11th junio 2014 9:09 pm

    Hola Javier, serias tan amable en ayudarme con el código en php, ya que recién estoy aprendiendo.
    lo que necesito es que si tienes el código en php lo puedas publicar por favor.

    Muchas gracias y muy bueno tu blog, he aprendido mucho gracias a ti.

  • Reinaldo García
    2nd julio 2014 10:55 pm

    Hola javiertellez, estoy realizando un proyecto y ya mi proyecto envia data a un archivo en el servidor y luego la guardo en la db, pero me hace falta el envio de una foto junto a esa data; Vi tu blog hablando acerca de esto pero la verdad que nose como agregar esa libreria en mi android studio para comenzar a programar esto que explicas, saludos y gracias de antemano.

    • Erick
      4th julio 2014 7:00 pm

      Para agregarlo en Android Studio copia el .jar que tiene dentro de la carpeta lib (en el proyecto que subio) y ponla en tu carpeta de libs en android studio y en tu build.grandle agrega

      configurations {
      all*.exclude group: ‘com.android.support’, module: ‘support-v4’
      all*.exclude group: ‘com.google.android.gms’, module: ‘play-services’
      }
      dependencies {
      compile ‘com.android.support:appcompat-v7:+’
      compile fileTree(dir: ‘libs’, include: [‘*.jar’])
      }

      dependencies {
      compile ‘com.android.support:appcompat-v7:+’
      compile files(‘libs/httpmime-4.2.5.jar’)
      }

      (agruega solo el httpmine, pongo todo porque con todo eso me funciona) y ya despues solo dejas que recargue y listo

  • ranceis
    21st julio 2014 3:42 pm

    el codigo funciona a la perfección pero cuando intento enviar fotos seguidas me arroja un error OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) y otros más..

    • ranceis
      22nd julio 2014 2:20 am

      ya corregi el detalle poniendo una solucion del comentario de pedro. ahora el detalle surge cuando tomo una foto vertical sale volteada la imagen en horizontal todo perfecto

  • Dante Valencia
    13th agosto 2014 8:01 pm

    necesito tu ayuda por favor, necesito enviar mi base de datos al servidor. como hago eso?

  • Carlos
    22nd agosto 2014 8:44 pm

    Y si después de subir la foto al servidor, quiero eliminarla del móvil, como puedo hacerlo?

    • Juan
      16th abril 2015 3:19 pm

      Hola Carlos me gustaría saber si pudiste borrar la foto después de subirla, si es así agradecería tu ayuda, saludos!

  • danilo
    27th agosto 2014 2:15 pm

    Después de haber leído todos los comentarios con los problemas encontrados y sus posibles soluciones me atrevo a preguntar lo que ya lo hicieron más arriba.
    Es posible invertir el proceso y descargar archivos del web service al terminal android?

  • danilo
    27th agosto 2014 2:21 pm

    Ups. Perdón por lo mal educado, primeramente hola soy danilo y estoy empezando la programación de app android, segundo felicitaciones por el tutorial y por darte el tiempo de responder a las inquietudes, tercero mi pregunta del comentario anterior. Se puede descargar archivos del web service desde android.?

  • diego
    2nd septiembre 2014 4:06 pm

    la verdad soy muy nuevo e inexperto en esto, me sale error MultipartEntity, y en ContentBody, FileBody que se encuentra en protected Void doInBackground(String… params) {…} la ayudarias mucho si me das una respuesta muy detallada lo que te digo soy super nuevo en este y aun me queda un poco complicado

  • Jeancarlos
    17th septiembre 2014 2:36 pm

    Buen dia Javier. Excelente aporte para las aplicaciones. Recien estoy iniciando es este tema del envio de datos y tengo una duda con el archivo que debo descargar. “httpmime-4.2.4.jar”. No encuentro el archivo en el link que dejaste. Podrías ayudarme en esta parte? Gracias de antemano.

  • luis
    13th octubre 2014 4:05 am

    Yo también quisiera saber como subo un archivo sqlite

  • francisco javier
    20th noviembre 2014 2:41 pm

    Hola Javier, queri comentarte algo he bajado tu proyecto he creado una carpeta llamada fotos en mi web he pegadop el php tal cual tienes tu y no me sube la foto me puedes ayudar
    el php asi

    guardo el archivo en la carpeta fotos este archivo up.php
    no se donde cometo el error en el codigo modifico la direcion tal cual es htpp://www……../fotos/up.php

    y nada no sube la foto sinembargo mi me sabe el spiner diciendo subiendo foto al cabo de los 3seg se quita
    te lo agradeceria mucho
    Gracias

    nada me sube la foto

    Gracias

  • jorge
    17th diciembre 2014 3:15 am

    hola que tal. probe tu codigo y trate de desviar la foto a mi servidor web.
    pero la aplicacion toma la foto pero cuando veo en mi servidor no llega nada..
    y coloque el codigo php que tienes alli.. y nada.. ayuda

  • eduardo
    31st enero 2015 12:14 am

    hola e seguido todos los pasos y la aplicación aparentemente funciona pero a mi pagina no llega nada, lo e sustituido por esta linea “http://mark1.comyr.com/mark2.php”

  • Juan
    3rd marzo 2015 11:08 pm

    javiertellez, grandisimo tutorial.

    me gustaria preguntarte una duda…

    como se podria hacer para a la vez de subir la foto, cree un archivo .txt (mismo nombre que la foto .txt) con un texto descriptivo (rellenado por el usuario en un text)

    Gracias

  • Edgar
    10th marzo 2015 9:19 pm

    Tengo un problema, me sale el mensaje en mi android de la que la camara se ha detenido. Cambia la url al de mi servidor

  • azizul wahab kahn
    11th marzo 2015 9:12 am

    pls. tell me what will be change in php code if i want to save image in my sql database table blobe type. or is it possible if i want to image save to folder from android and image name, path will be save into mysql database? thanks.

  • Abiu Roldan
    7th abril 2015 7:54 pm

    Hola, buenas!, mire mi comentario no tiene que ver con esta app, soy nuevo en esto y me gustaria crear una app la cual yo tome una foto cualquiera y pueda usarla para ponerle filtros (tipo snapchat) pero filtros como nombre de un evento que tendremos, es un proyecto y no se sinceramente que hacer, espero puedan ayudarme, saludos!.

  • Isai Mosso
    28th junio 2015 8:04 pm

    y si tuviera que mandar todas las fotos que encuentras en la carpeta ??

  • Gree Dony
    5th agosto 2015 7:45 pm

    Buenas tardes Ingenieros, quiero agradecerles por brindarnos sus conocimientos, muy chevere estos tutoriales. Ingenieros me pueden colaborar por favor, no he podido encontrar una solución y no quiero quedarme con “no pude no intento mas” el que persevera alcanza, una ayuda o una iniciativa por fa.
    Me encontraba trabajando en eclipse Indigo, un día x no me continuo funcionando los emuladores, arrojando el siguiente error, y pues nada que encuentro la solución, lo que he echo es instalar de nuevo la plataforma eclipse con sus requerimientos y nada que me sirve los emuladores, intento crear emuladores nuevos y tampoco este es el error que me dice:

    Starting emulator for AVD ‘Android-4-3-1′
    Failed to create Context 0x3005
    emulator: WARNING: Could not initialize OpenglES emulation, //////////////////////////////////
    //using software renderer.
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //could not get wglGetExtensionsStringARB//
    //Could not initialize emulated framebufferCannot set up //guest memory// //’android_arm’: Invalid argument//
    ////////////////////////////////////////
    Al comienzo que empece con eclipse me arrojaba un error parecido e investigue y aumente la ram a 1024 y se soluciono, pero esta vez no.
    Agradezco la ayuda, no encuentro como solucionar esto.

    • Gree Dony
      5th agosto 2015 8:33 pm

      La solución que me acabo de dar, es instale Android Studio y ejecute o cree un emulador y me funciono.
      Entonces intente abrirlo por eclipse y ya todo esta bien.

      No supe cual era el error pero ya puedo continuar trabajando en esto.

  • kenny romero
    11th agosto 2015 4:05 pm

    Hola amigo, me podrias aclarar un poco lo del php. No tengo muy claro como recibo las img y las guardo . Gracias

  • HÉCTOR TORRES
    28th octubre 2015 4:08 am

    Cordial saludo. Podríamos conversar vía Skype por favor?. Mi usuario es agromerchant. Gracias mil.

  • Juan Manuel
    8th mayo 2016 7:26 pm

    Hola no he podido hacer trabajar tu proyecto, existe alguna forma de que me puedas colocar el enlace que contiene el proyecto completo ya que no responde. Ojalá y me puedas ayudar. Gracias.

  • Mario German
    4th junio 2016 3:21 pm

    Que buen tutorial: Tengo al siguiente inquietud y si la imagen la estoy guardando en un directorio remoto y adicionalmente quiero que este en la base de datos en una columna especifica como deberia hacer el codigo.

    Agradezco todo el apoyo y colaboración que me puedan dar. Gracias.

  • Angel
    13th julio 2016 1:41 pm

    Hola que tal Gran tutorial, por favor podrias arreglar el link para descargar el app.Muchas Gracias de antemano.

  • Luis
    31st julio 2016 8:46 pm

    startActivityForResult(intent, TAKE_PICTURE); Que es TAKE_PICTURE si podrias especificar x favor

  • benjamin
    15th agosto 2016 11:32 pm

    me da error en parametros de asyntastk
    que va en lugar de los puntos

  • Fernando
    22nd febrero 2017 1:53 pm

    Hola! Muy interesante la guia. Estoy teniendo problemas en el UploaderFotos

    @Override
    protected Void doInBackground(String… params) {
    miFoto = params[0];
    try {
    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    HttpPost httppost = new HttpPost(“http://tuservidor.com/upload.php”);
    File file = new File(miFoto);
    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody foto = new FileBody(file, “image/jpeg”);
    mpEntity.addPart(“fotoUp”, foto);
    httppost.setEntity(mpEntity);
    httpclient.execute(httppost);
    httpclient.getConnectionManager().shutdown();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }

    No me reconoce los httpclient, ni MultipartEntity ni nada de eso.
    Lo tengo con la libreria httpmime que comentaste al principio.
    Te agradezco si podes colocar el enlace al proyecto o me puedas indicar como hago referencia de la clase UploaderFotos a la libreria esa.
    Muchas gracias por su tiempo!

  • Alfredo
    11th mayo 2017 1:20 pm

    Hola… como puedo hace para que me acepte un máximo de imágenes para mandar?. Gracias.

Post a Comment

*