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

Цель камеры или галереи уничтожает старую активность на некоторых устройствах

Я работаю над приложением, которое использует WebView для отображения его содержимого. Однако для того, чтобы выбрать изображение, необходимо открыть камеру или галерею.

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, 1);

    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent, 2);

Он работает отлично на большинстве устройств, но на HTC One и несколько других оба намерения разрушают мою активность, поэтому веб-просмотр перезагружается при возврате. У меня нет флага noHistory в AndroidManifest.xml. Что может быть причиной этой проблемы? Могу ли я избежать разрушения моей деятельности здесь?

4b9b3361

Ответ 1

Как правило, Android убивает вашу активность, когда запускается другое приложение.

Вы должны сохранить состояние Activity в onSaveInstanceState и когда активность будет восстановлена ​​в состоянии восстановления в onRestoreInstanceState или в onCreate.

Чтобы восстановить состояние WebView, вы можете использовать файлы cookie и сеансы и сохранять последний открытый URL. Когда активность будет воссоздана, просто перейдите к сохраненному URL-адресу WebView и получите результат процесса с камеры.

Ответ 2

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1);

Увидев ваш код, я могу судить о том, что ваш девиз - захватить изображение и использовать его позже.

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

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/seperate/newImage.png"));
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra("output", uriSavedImage);
startActivityForResult(cameraIntent, 1);

Ссылка: изображение из проблемы с камерой в андроиде

Ответ 3

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

Если единственное раздражение заключается в том, что webview перезагружается, возможно, вы можете решить эту проблему путем кэширования содержимого?

Например, в методе onStop() вашего действия вы получаете содержимое веб-представления и храните его где-нибудь. временный файл, sqlite,.... и в onCreate проверить, есть ли кеш (и, может быть, сколько ему лет), и при необходимости поместить это в веб-просмотр.

Учебник для получения html-кода из webview: http://lexandera.com/2009/01/extracting-html-from-a-webview/

Ответ 4

Если я не ошибаюсь, вы открываете камеру с устройства. Проверяете ли вы, что другое приложение не приобретает камеру? вы должны получить камеру перед запуском активности камеры. другое приложение, использующее экземпляр камеры. Вы должны освободить экземпляр камеры в при уничтожении или onstop, чтобы в следующий раз он будет доступен fr другое приложение для его использования или для вашего приложения.