Захваченное изображение не сохраняется на устройстве

Я пытаюсь сохранить на устройстве изображение, снятое камерой. Но не спасается.

// --- манифест

<uses-permission android:name="ANDROID.PERMISSION.CAMERA" />
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE" />

Я использую следующий код:

    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_REQUEST) {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

            try {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                File outFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "myimage.jpg");
                FileOutputStream fos = new FileOutputStream(outFile);
                photo.compress(Bitmap.CompressFormat.JPEG, 100, fos);

                fos.flush();
                fos.close();
                getImages();

person User_1191    schedule 03.12.2015    source источник
comment
Вы включили WRITE_EXTERNAL_STORAGE разрешение?   -  person Eric B.    schedule 03.12.2015
comment
вы добавили разрешение в манифест?   -  person KDeogharkar    schedule 03.12.2015
comment
да, я добавил все разрешения   -  person User_1191    schedule 03.12.2015


Ответы (2)


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

/*************************** Camera Intent Start ************************/

            // Define the file-name to save photo taken by Camera activity

            String fileName = "Camera_Example.jpg";

            // Create parameters for Intent with filename

            ContentValues values = new ContentValues();

            values.put(MediaStore.Images.Media.TITLE, fileName);

            values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera");

            // imageUri is the current activity attribute, define and save it for later usage

            imageUri = getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

            /**** EXTERNAL_CONTENT_URI : style URI for the "primary" external storage volume. ****/


            // Standard Intent action that can be sent to have the camera
            // application capture an image and return it.

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

            startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

            /*************************** Camera Intent End ************************/


        }

onActivityResult здесь:

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

        if (resultCode == RESULT_OK) {

            /*********** Load Captured Image And Data Start ****************/

            String imageId = convertImageUriToFile(imageUri, CameraActivity);


            //  Create and excecute AsyncTask to load capture image

            new LoadImagesFromSDCard().execute("" + imageId);

            /*********** Load Captured Image And Data End ****************/


        } else if (resultCode == RESULT_CANCELED) {

            Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
        } else {

            Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
        }
    }
}
person curiousMind    schedule 03.12.2015
comment
Я использую ваш код и получил исключение, java.lang.SecurityException: Permission Denial: запись com.android.providers.media.MediaProvider uri content: // media / external / images / media from pid = 6550, uid = 10103 требует android .permission.WRITE_EXTERNAL_STORAGE или grantUriPermission () - person User_1191; 03.12.2015
comment
вы не добавили разрешение в файл манифеста. ‹Использует-разрешение android: name = android.permission.WRITE_EXTERNAL_STORAGE /› - person curiousMind; 03.12.2015
comment
@ User_1191 Я добавил метод onActivityResult. - person curiousMind; 03.12.2015
comment
я добавил разрешение - person User_1191; 03.12.2015
comment
я добавил это в вопросе. теперь мне не хватает convertImageUriToFile () - person User_1191; 03.12.2015
comment
Я тестирую код на эмуляторе, возникает ли проблема? - person User_1191; 03.12.2015
comment
Я не использую только эмулятор - person User_1191; 03.12.2015
comment
Я перехожу по указанной вами ссылке, она захватывает изображение, но не сохраняется - person User_1191; 03.12.2015
comment
@ User_1191 вы проверили в FileManager - ›DCIM -› Папка камеры ?? - person curiousMind; 03.12.2015
comment
Готово ... имя файла генерируется случайным образом. - person User_1191; 03.12.2015
comment
Я поддерживаю это ... но это отразится позже из-за моего подсчета репутации. :) - person User_1191; 03.12.2015

// не используйте data.getData (), так как на каком-то устройстве он возвращает null.

Поэтому используйте курсор для получения захваченного изображения.

@Override
protected void onActivityResult(int requestCode, int resultCode,
    Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);

    if (resultData != null) {

    String[] projection = { MediaStore.Images.Media.DATA };
            Cursor cursor = managedQuery(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    projection, null, null, null);
            int column_index_data = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToLast();

            String imagePath = cursor.getString(column_index_data);
            Bitmap bitmapImage = BitmapFactory.decodeFile(imagePath );
            imageView.setImageBitmap(bitmapImage );

        }
person Mayur Sakhiya    schedule 03.12.2015