28

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

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

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 был вызван, и новое изображение потеряно.

справка приветствуется.

+1

Возможный дубликат [Android: действие будет уничтожено после вызова намерения камеры] (http: // stackoverflow.com/questions/16014930/android-activity-getting-destroyed-after-calling-camera-intent) –

ответ

102

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

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

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

Спасибо! android: configChanges = "orientation | keyboardHidden" - недостающая строка! ;) – Cattivo

+13

СПАСИБО за этот ответ! Я обнимаю свой монитор –

+15

Также обратите внимание, что в API выше уровня 13 вы также должны добавить «screenSize» в configChanges. http://developer.android.com/guide/topics/manifest/activity-element.html –

1

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

1

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

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

Смежные вопросы