Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo tomar una foto y enviar a HTTP POST solicitud con Android?

Sé que esto tiene respuestas aquí y allá, pero no pude hacer que ninguno de ellos funcione. ¿Alguien sabe una buena referencia, o un tutorial para esto, tal vez también publicar aquí?

Lo que tengo que hacer es:

1) proporcione un botón, que abre la aplicación de la cámara. He hecho esto por un startResultActivity()

2) el usuario toma la foto y regresa a la aplicación, con la foto guardada, preferiblemente con una vista previa en un ImageView. He intentado algo, pero no puedo probar en un dispositivo emulado.

3) presiona un botón "enviar", y la aplicación envía la imagen a HTTP POST. Con "multipart", lo que sea. El desarrollador de php no quiere que envíe la imagen como una cadena convertida a partir de una matriz de mapa de bits.

Cualquier ayuda para esto será apreciada. Gracias !

  • Interacción con Android App con Laravel Action methods
  • GCM con PHP (Google Cloud Messaging)
  • ¿Dónde poner mi archivo php?
  • Cualquier forma de hacer que el navegador predeterminado de Android reconozca nombres de archivo no ASCII en las descargas de "Content-Disposition: attachment"?
  • Cómo difundir la referencia a la aplicación de Android
  • C2DM con PHP usando OAuth2.0 (ClientLogin está obsoleto!)
  • ¿Por qué el audio subido está dañado cuando la subida es claramente exitosa?
  • enviar notificaciones push a varios dispositivos android usando GCM
  • One Solution collect form web for “¿Cómo tomar una foto y enviar a HTTP POST solicitud con Android?”

    Este enlace debe ser más que suficiente para hacer clic, guardar y obtener la ruta de una imagen: Capture Images

    Esta es la clase que escribí para cargar imágenes a través de HTTP POST:

     public class MultipartServer { private static final String TAG = "MultipartServer"; private static String crlf = "\r\n"; private static String twoHyphens = "--"; private static String boundary = "*****"; private static String avatarPath = null; public static String postData(URL url, List<NameValuePair> nameValuePairs) throws IOException { HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(10000); connection.setConnectTimeout(15000); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Cache-Control", "no-cache"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); String avatarName = null; StringBuilder query = new StringBuilder(); boolean first = true; for (NameValuePair pair : nameValuePairs) { if (first) first = false; else query.append("&"); query.append(URLEncoder.encode(pair.getName(), "UTF-8")); query.append("="); query.append(URLEncoder.encode(pair.getValue(), "UTF-8")); if ((avatarName = pair.getName()).equals("avatar")) { avatarPath = pair.getValue(); } } FileInputStream inputStream; OutputStream outputStream = connection.getOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(outputStream); dataOutputStream.writeBytes(query.toString()); // Write Avatar (if any) if(avatarName != null && avatarPath != null) { dataOutputStream.writeBytes(twoHyphens + boundary + crlf); dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + avatarName + "\";filename=\"" + new File(avatarPath).getName() + "\";" + crlf); dataOutputStream.writeBytes(crlf); /*Bitmap avatar = BitmapFactory.decodeFile(avatarPath); avatar.compress(CompressFormat.JPEG, 75, outputStream); outputStream.flush();*/ inputStream = new FileInputStream(avatarPath); byte[] data = new byte[1024]; int read; while((read = inputStream.read(data)) != -1) dataOutputStream.write(data, 0, read); inputStream.close(); dataOutputStream.writeBytes(crlf); dataOutputStream.writeBytes(twoHyphens + boundary + twoHyphens + crlf); } dataOutputStream.flush(); dataOutputStream.close(); String responseMessage = connection.getResponseMessage(); Log.d(TAG, responseMessage); InputStream in = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); StringBuilder response = new StringBuilder(); char []b = new char[512]; int read; while((read = bufferedReader.read(b))!=-1) { response.append(b, 0, read); } connection.disconnect(); Log.d(TAG, response.toString()); return response.toString(); } } 

    El uso es bastante simple: llame a este método estático y pase el camino de su imagen como:

     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("avatar", imagePath)); 

    y finalmente:

     MultipartServer.postData(url, nameValuePairs); 

    Y no te olvides de llamar a esta función en un hilo separado o obtendrá NetworkOnMainThreadException .. 🙂

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.