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

Активность kill/onCreate вызвана после съемки с помощью намерения

Я пытаюсь сделать снимок, используя намерение. Моя проблема в том, что иногда после съемки моя работа, которая вызывает startActivityForResult, кажется, уничтожена, так что onCreate вызывается снова.

Вот мой код для съемки после щелчка изображения, изображение которого нужно заменить:

if (!getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) {
            Util.makeLongToast(R.string.lang_no_camera);
        } else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_ITEM_PHOTO);
        }

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(TAG, "onactivityresult called");
    if (requestCode == TAKE_ITEM_PHOTO) {
        if (data != null) {

            imageUri = data.getData();


                try {
                    img_photo.setImageBitmap(Media.getBitmap(
                            getContentResolver(), imageUri));
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        } else
            Log.w(TAG, "data is null");
    }
}

Итак, я пытаюсь сделать снимок и заменить изображение изображения. Но в некоторых случаях onCreate вызывается после того, как onActivityResult был вызван и новое изображение потеряно.

Помощь приветствуется.

4b9b3361

Ответ 1

На самом деле камера вызывает изменение ориентации в вашей деятельности, поэтому ваша деятельность уничтожается и воссоздается.

Добавьте это в свой файл манифеста, это предотвратит изменение ориентации, и ваша деятельность не будет уничтожена и воссоздана.

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait" >
</activity>

Ответ 2

Исправить ориентацию вашей деятельности/приложения, потому что, когда вы выполняете операцию back/finish(), и в то же время вы меняете ориентацию, тогда обновление активности и повторный запуск снова автоматически.

Ответ 3

Кажется, что есть телефоны, которые разрушают действие при импорте изображения, например, Galaxy S3. Упоминается, что если мое приложение находится в портретном режиме, это произойдет, потому что изображения находятся в ландшафтном режиме. Таким образом, все предложения, связанные с configChanges в файле манифеста, не применимы к этой ситуации.

То, что я закончил, вместо того, чтобы бороться с onDestroy активности (что вызвало onActivityResult() фрагмента, который не будет вызван после onCreate()), должен был реализовать onActivityResult() также в самой деятельности, и там я может получить путь к изображению. Затем я передал этот путь к фрагменту, когда он создается, для дальнейшей обработки. Конечно, я должен был сообщить своему приложению, как только он будет воссоздан, что ему нужно вернуться к вызывающему fragmnet для обработки этого образа

Ответ 4

Отключить настройку "Не держать действия". В противном случае это разрушит активность, которую вы покидаете.