Активность камеры по умолчанию не заканчивается после нажатия кнопки ОК - PullRequest
19 голосов
/ 02 сентября 2011

Я вызываю камеру по умолчанию из своей деятельности, а затем обрабатываю 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();
            }
    }

Ответы [ 4 ]

15 голосов
/ 06 февраля 2012

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

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

- Правка -

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

НТН

1 голос
/ 11 февраля 2013

проверьте это

Случай 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 S в обоихвышеупомянутые случаи В случае 1: a.Image хранится в пользовательской папке.б.Если «System.currentTimeMillis ()» изменить на («новая дата (). ToString ()»), изображение не будет сохранено, и камера не вернется к моей деятельности.(Возможно, потому что «System.currentTimeMillis» не имеет пробелов, а «new Date (). ToString ()» может содержать некоторые специальные символы и пробелы). В случае 2: ​​a.Изображение сохраняется в папке камеры

Спасибо всем

1 голос
/ 07 сентября 2012

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

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

0 голосов
/ 11 июня 2017

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

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

...