загрузить захваченное изображение в Cloudinary прямо в Android

Я хочу сделать снимок и загрузить его напрямую в Cloudinary. Как я могу узнать имя изображения, чтобы установить его в операторе загрузки cloudinary.uploader().upload("nameofthepic", Cloudinary.emptyMap());.

Вот мой код:

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();
        }
    }
}

person Aya Radwan    schedule 14.03.2015    source источник
comment
Если приведенный ниже ответ сработал для вас, не могли бы вы принять его как отмеченный ответ, чтобы другие пользователи были уверены, что он работает?   -  person Martin Erlic    schedule 20.01.2017


Ответы (1)


Порядок такой: Сфотографировать->сохранить в файл->загрузить в облако Вот код:

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;
        }

Таким образом, вы на самом деле загружаете photoFile, которое на самом деле является захваченным изображением.

Приятно поместить функцию загрузки вместе с некоторыми преобразованиями изображения (масштабирование, изменение размера) в AsyncTask, потому что изображения с камер в современных телефонах довольно большие (по размеру).

Надеюсь, поможет.

person Theodoros80    schedule 28.03.2015
comment
m получаю ошибку абстрактного метода в строке:::: cloudinary.uploader().upload(photoFile.getAbsolutePath(), Cloudinary.emptyMap()); - person Pranita; 15.07.2017
comment
нашел решение самостоятельно :) Cloudinary.emptyMap() теперь заменен на ObjectUtils.emptyMap() - person Pranita; 15.07.2017