Android, отладка MediaStore.ACTION_IMAGE_CAPTURE Intent - PullRequest
2 голосов
/ 20 ноября 2011

Я пытаюсь сделать снимок с намерением MediaStore.ACTION_IMAGE_CAPTURE следующим образом:

        String fileName = "testphoto.jpg";
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, fileName);
        values.put(MediaStore.Images.Media.DESCRIPTION,
                "Image capture by camera");
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
        imageUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                .putExtra(MediaStore.EXTRA_OUTPUT,
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI),
                R.id.capture_image_request);

Результат обработки:

        try {
            uploadedPicture = BitmapFactory.decodeStream(getContentResolver()
                                           .openInputStream(imageUri));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

И после этого я пытаюсьпоказать только что снятое изображение:

((ImageView) findViewById(R.id.profile_picture_thumbnail)).setImageBitmap(uploadedPicture);

И это не работает.После этого я попытался открыть поток ввода из этого Uri:

final InputStream is = getContentResolver().openInputStream(uri);
Log.("mydebug tag", is.available());

is.available () возвращает 0. Почему этот файл пустой ???

Когда я пытался отладить, яобнаружил, что Uri типа «content: // media / external / images / media / 68» был возвращен.После этого я жестко запрограммировал:

    Uri uri = Uri.parse("content://media/external/images/media/68");

    Bitmap pic;
    try {
        pic = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
        ((ImageView) findViewById(R.id.profile_picture_thumbnail)).setImageBitmap(pic);
    } catch (FileNotFoundException e) {
        Log.e(TAG, e.getMessage());
    }

И это сработало.

Поэтому мне интересно, почему, когда я создаю Uri вручную - это работает, но когда я получаю Uri только что сделанного снимка - это«т?У меня такое ощущение, что когда я получаю доступ к Uri только что сделанного снимка, он еще не сохраняется в файловой системе, поэтому его размер равен 0 и не может быть загружен в ImageView.Но через некоторое время (когда я снова запускаю свое приложение с жестко закодированным Uri) файл сохраняется и работает нормально.Есть ли способы принудительной очистки этого файла на диске?

...