Действие камеры по умолчанию не завершается после нажатия кнопки OK

Я вызываю камеру по умолчанию из своей активности, а затем обрабатываю onActivityResult. Мой код, похоже, отлично работает на LG Ally, у которого нет подтверждения при съемке снимка. Однако, когда я запускаю то же приложение на Nexus S, оно предлагает мне «ОК», «Повторить» или «Отмена», прежде чем вернуться к моей активности. В то время как «Отмена» работает, возвращаясь к моей деятельности без сохранения изображения, «ОК», похоже, не имеет никакого эффекта, даже не возвращаясь к моей активности.

Мой код ниже:

private void captureImage() {

    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + (new UserContextAdapter(this)).getUser() + "/");
        path.mkdirs();
        File file = new File(path, "Image_Story_" + mRowId.toString() + ".jpg");

        newImageUri = Uri.fromFile(file);

        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri);

        startActivityForResult(intent, CAPTURE_IMAGE);
    }

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    switch (requestCode) {
    case CAPTURE_IMAGE:
        switch (resultCode ) {
        case 0:
            Log.i("CAPTURE", "Cancelled by User");
            break;
        case -1:
            mImageUri = newImageUri;
            setImageFromUri();
            }
    }

person Rahul Gupta-Iwasaki    schedule 01.09.2011    source источник
comment
убедитесь, что вы предоставили разрешение на хранение   -  person Hamid Goodarzi    schedule 27.06.2017


Ответы (4)


Я думаю, что у меня была точно такая же проблема.

Если путь для сохранения изображения неверный, камера не вернется в ваше приложение. Как только я убедился, что каталог существует, все заработало нормально. Убедитесь, что каталог существует, тогда он должен работать.

-- Редактировать --

Я только что видел, что вы звоните path.mkdirs();, но я думаю, что это не работает. Как вы можете прочитать в документе Android: «Обратите внимание, что этот метод не генерирует IOException в случае сбоя. Вызывающие стороны должны проверять возвращаемое значение». Обязательно проверьте, действительно ли каталог существует.

чт

person qedejavu    schedule 06.02.2012
comment
хм, это было так давно, что я на самом деле не помню, как я решил проблему в моем случае, но спасибо, что опубликовали свое решение @qedejavu ^.^ - person Rahul Gupta-Iwasaki; 21.03.2012
comment
Привет, Рахул, на самом деле я проверяю наличие папки, и она действительно существует, и изображения хранятся там, но все же кнопка «ОК» не возвращает меня к моей деятельности. Итак, то, что написал @qedejavu, не похоже на решение. Можете ли вы вспомнить, как вы решили эту проблему? - person Tom Burger; 10.08.2012
comment
Это также происходит, когда у родного приложения камеры нет доступа к каталогу, в который вы пытаетесь его сохранить. Например, личное хранилище вашего приложения недоступно для собственного приложения «Камера». - person Joshua Pinter; 17.03.2014

Кроме того, убедитесь, что ваше приложение имеет <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />, если вы используете Environment.getExternalStorageDirectory().getPath() выше.

Надеюсь, это поможет =)

person Abdo    schedule 07.09.2012

пожалуйста, проверьте это

Дело 1:

Uri newImageUri = null;

File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/");

path.mkdirs();

boolean setWritable = false;

setWritable = path.setWritable(true, false);

File file = new File(path, "Image_Story_" + System.currentTimeMillis() + ".jpg");

newImageUri = Uri.fromFile(file);

Log.i("MainActivity", "new image uri to string is " + newImageUri.toString());

Log.i("MainActivity", "new image path is " + newImageUri.getPath());            

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri);

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);

Случай 2:

String fileName = "" + System.currentTimeMillis() + ".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");

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

Log.i("MainActivity", "new image uri to string is " + imageUri.toString());

Log.i("MainActivity", "new image path is " + imageUri.getPath());

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);

Я могу сохранять изображения через камеру на nexus в обоих вышеперечисленных случаях. В случае 1: a.Image хранится в пользовательской папке. б. Если «System.currentTimeMillis()» изменено на («new Date().toString()»), изображение не сохраняется, и камера не возвращается к моей активности. (Возможно, потому что «System.currentTimeMillis» не содержит пробелов, а «new Date().toString()» может содержать некоторые специальные символы и пробелы) В случае 2: ​​a. Изображение хранится в папке камеры

Спасибо всем

person Satish    schedule 11.02.2013

У меня такая же проблема. Вам нужно выполнить только одно задание, в памяти телефона проверить, есть ли у вас каталог Изображения или нет. Если у вас нет такой библиотеки, сделайте это вручную.

Надеюсь, что это работает для вас.

person Vishal Dhanani    schedule 11.06.2017