example - carga la imagen capturada a Cloudinary directamente en Android
upload image android studio (1)
Quiero capturar una imagen y subirla a Cloudinary directamente. ¿Cómo puedo saber el nombre de la imagen para configurarlo en la declaración de carga cloudinary.uploader().upload("nameofthepic", Cloudinary.emptyMap());
.
Aquí está mi código:
public class Camera extends ActionBarActivity implements View.OnClickListener {
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
b= (Button) findViewById(R.id.button);
b.setOnClickListener(this);
}
public static final int TAKE_PHOTO_REQUEST = 0;
@Override
public void onClick(View v) {
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePhotoIntent, TAKE_PHOTO_REQUEST);
Map config = new HashMap();
config.put("cloud_name", "dkepfkeuu");
config.put("api_key", "552563677649679");
config.put("api_secret", "7n8wJ42Hr_6nqZ4aOMDXjTIZ4P0");
Cloudinary cloudinary = new Cloudinary(config);
try {
cloudinary.uploader().upload("", Cloudinary.emptyMap());
} catch (IOException e) {
e.printStackTrace();
}
}
}
El orden es el siguiente: Tomar foto-> guardar en archivo-> cargar en cloudinary Aquí está el código:
File photoFile;
@Override
public void onClick(View v) {
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_TAKE_PHOTO) {
if (resultCode == RESULT_OK) {
//File to upload to cloudinary
Map config = new HashMap();
config.put("cloud_name", "dkepfkeuu");
config.put("api_key", "552563677649679");
config.put("api_secret", "7n8wJ42Hr_6nqZ4aOMDXjTIZ4P0");
Cloudinary cloudinary = new Cloudinary(config);
try {
cloudinary.uploader().upload(photoFile.getAbsolutePath(), Cloudinary.emptyMap());
} catch (IOException e) {
e.printStackTrace();
}
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
//finish();
}
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "capturedImage";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
return image;
}
Así que en realidad estás cargando photoFile
que es la imagen realmente capturada.
Es bueno poner la función de carga junto con algunas transformaciones de imagen (escala, redimensionar) en AsyncTask
porque las imágenes de la cámara en los teléfonos modernos son bastante grandes (en tamaño).
Espero eso ayude.