Подтвердить что ты не робот

Android: действие будет уничтожено после вызова камеры Intent

У меня две операции (A1, A2). A1 вызывает A2 и от A2 я вызываю намерение камеры, как показано ниже

launchIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);   
startActivityForResult(launchIntent,CAMERA_REQUEST);

Он открывает камеру, и я могу сделать снимок. Но проблема возникает, когда я нажимаю кнопку сохранения (кнопка тика в s3), мой onActivityResult не вызывается, а вызывается метод A2 onDestroy. У меня мало логики, которые нужно сделать в onActivityResult fn.

Я прочитал сообщение в Stackoverflow относительно этого, но я не смог получить полезный вывод из этого. У меня есть мой манифест, как это для моей второй Activity (A2)

android:configChanges="keyboardHidden|orientation|locale"
android:screenOrientation="portrait

Примечание: В HTC One X мой onActivityResult fn получает вызов, но в моей S3 вторая активность (A2) уничтожается

Поделитесь с нами своими мыслями. Спасибо в Advance

4b9b3361

Ответ 1

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

android:configChanges="orientation|screenSize"

в манифесте android (не только android:configChanges="orientation", потому что, как предлагают здесь, он не работает для уровня API 13 или выше).

он предотвращает разрушение активности, он работает для меня.

Ответ 2

Запуск камеры требует большой памяти. Таким образом, на устройствах с низкой памятью система Android закрывает действия, выполняемые в фоновом режиме и, следовательно, вызывается onCreate(). Из-за этой фотопаты, которую вы дали, она становится нулевой, и вы не сможете получить сохраненное изображение.

Решение состоит в том, чтобы сохранить фотопату, пока система разрушает вашу активность, а затем восстанавливает ее снова.

@Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub

            outState.putString("photopath", photopath);


        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if (savedInstanceState != null) {
            if (savedInstanceState.containsKey("photopath")) {
                photopath = savedInstanceState.getString("photopath");
            }
        }

        super.onRestoreInstanceState(savedInstanceState);
    }

и в случае, если вы делаете это на фрагменте.

@Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub

            outState.putString("photopath", photopath));


        super.onSaveInstanceState(outState);
    }

    @Override
    public void onViewStateRestored(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        if (savedInstanceState != null) {
            if (savedInstanceState.containsKey("photopath")) {
                photopath = savedInstanceState.getString("photopath");
            }
        }

        super.onViewStateRestored(savedInstanceState);
    }

Ответ 3

Убедитесь, что у вас нет настройки разработчика "Не сохраняйте действия", так как он уничтожит действие, которое вы покидаете.

Ответ 4

Для приложения с камерой требуется много памяти и для освобождения памяти операционная система должна убивать фоновые приложения, в том числе ваши. Это нормально для всех приложений Android. Ваша деятельность будет воссоздана, когда приложение камеры вернется. Чтобы сохранить информацию о состоянии активности, переопределите onSaveInstanceState(), чтобы сохранить ваши данные и прочитать их обратно в onCreate().

Ответ 5

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

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

Если он будет уничтожать мою активность каждый раз, когда я вызываю Camera Intent, вся информация, которую я имел раньше о маркерах и их местоположении, будет потеряна.. Кроме того, мне придется снова инициализировать карту. Это большая проблема для моего приложения.

И да, это происходит, когда я делаю снимок в альбомном режиме. Если я сделаю снимок на портрете, все будет хорошо.

Я попытаюсь использовать android:configChanges="orientation|screenSize" Как предложено здесь.. Надеюсь, это поможет!