2013-04-22 2 views
13

Итак, этот вопрос задавался во многих формах на этом форуме, но ни один из ответов не помогает мне. У меня есть ошибка, которую я смог воспроизвести только на Samsung Galaxy S3.Galaxy S3 - съемка в портретном режиме разрушает активность

Я хочу просто взять и сохранить фотографию с помощью камеры телефона, но моя активность уничтожается, прежде чем я когда-либо услышу от onActivityResult. Это ТОЛЬКО случается, когда я использую камеру в портретном режиме, в ландшафтном режиме это нормально.

Я использую этот код для запуска камеры:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, Config.ACTIVITY_TAKE_PHOTO); 

В портретном режиме, я никогда не видел вызов onActivityResult (от активности камеры), я просто вижу OnDestroy(), называемой в моем запуск. В журнале нет исключений или ошибок, и нет ничего плохого в том, что он может произойти сбой.

Я видел сообщения, которые рекомендуют добавлять «андроид: configChanges =» orientation | keyboardHidden »к манифесту и делать много других вещей для управления изменением ориентации, которое происходит при использовании камеры, но ничего не помогло далеко.

Неужели кто-нибудь еще решил эту проблему?

+0

http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int). Вы можете установить ориентацию дисплея. У меня есть галактика s3, я использовал код на сайте разработчика. Я не могу воспроизвести проблему, с которой вы столкнулись. Однако я столкнулся с другой проблемой, ориентацией диспетчеризации был портрет, изображение было захвачено, но сохраненное изображение было повернуто. – Raghunandan

+0

Вы должны прочитать эту дискуссию, а также понять, что если вы видите onDestroy(), Android не убивает ваш процесс. Что-то еще. Пожалуйста, прочитайте и учтите документацию жизненного цикла деятельности, а также убедитесь, что «android: configChanges =» orientation | keyboardHidden »- это хак, который скрывает много грехов (ошибок), если вы действительно не понимаете его. Https://groups.google. com/forum /? fromgroups = #! topic/android-platform/x72BabVtWcQ – Simon

+0

Саймон, есть ли у вас какие-либо советы о том, как получить дополнительную информацию, связанную с onDestroy() моей деятельности? Есть ли что-нибудь, что я могу сделать, чтобы распечатать больше подробная трассировка стека, ведущая к ней? – TomBomb

ответ

1

Android может вызвать метод destroy() в определенных сценариях. Первый - когда мы используем метод finish(). Альтернативой является использование метода isFinishing() из класса Activity. Если это действительно дорабатывается может завершить свои ресурсы, в противном случае, вы можете сохранить значения выделяется класс, который наследует вку

@Override 
protected void onDestroy() { 

    final YourApp app = (YourApp) getApplicationContext(); 
    if (app != null && isFinishing()) { 
     app.finalizeAppResources(); 
    } 

    // ... 

    super.onDestroy(); 
} 
18

Если вы ориентируетесь за уровень API 13 Добавление

android:configChanges="orientation|keyboardHidden" 

Манифесту будет недостаточно.

Проверить этот экстракт из Android documentation

Примечание: Если ваши цели приложений на уровне API 13 или выше (как указано в minSdkVersion и атрибуты targetSdkVersion), то вы должны также объявить о конфигурации «Размер экрана», потому что он также изменяется, когда устройство переключается между портретной и альбомной ориентацией.

Поэтому попробуйте добавить

android:configChanges="orientation|keyboardHidden|screenSize" 

в файл манифеста. Это должно решить вашу проблему.

+0

Это было очень полезно для меня – adrian4aes

+0

@dishan Я понимаю ориентацию и флаг screenSize здесь, но почему keyboardHidden? –

+0

@TashPemhiwa Да для этого конкретного вопроса 'keyboardHidden' может не иметь никакого эффекта. Таким образом, 'android: configChanges =" orientation | screenSize "' также должен работать. Но снова включение 'keyboardHidden' обеспечит вам дополнительную защиту, поскольку оно предотвращает перезагрузку вашей активности на событии изменения доступности клавиатуры. 'orientation' и' keyboardHidden' являются наиболее часто используемыми изменениями конфигурации в Android, которые люди хотят обрабатывать самостоятельно, не перезапуская активность. Поэтому, имея «клавиатуру», будет разумная вещь. – dishan

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