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
Ответы
Ответ 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"
Как предложено здесь.. Надеюсь, это поможет!