TakePhotoAction аварийно завершает работу приложения Android и запускается снова на Xiaomi Android 12Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 TakePhotoAction аварийно завершает работу приложения Android и запускается снова на Xiaomi Android 12

Сообщение Anonymous »

Кросспост: https://en.delphipraxis.net/topic/12872 ... ndroid-12/
< h2>Окружающая среда:
  • Delphi 12.2 (последняя версия SP)
  • APP для Android и iOS
  • Аппаратное обеспечение Pixel 7a (Android 15) / Xiaomi Redmi (Android 12 SP1)
< strong>Проблема:
Проблема возникает только на устройствах Xiaomi (или, возможно, на устройствах других марок, которые я не тестировал). На Pixel он работает нормально.
В моем проекте я загружаю данные из конечной точки API в локальную базу данных SQLite. Затем я делаю фотографии и сохраняю их вместе с загруженными данными.
Вот проблемный код:

Код: Выделить всё

procedure TPhotoForm.TakePicture(Sender: TObject);
begin
if TOSVersion.Check(11) then
ActionTakePhotoFromCamera.Execute;
end;
Я использую тот же код, что и в примере с Embarcadero:
https://docwiki.embarcadero.com/CodeExa ... emo_Sample
Проблема возникает после вызова процедуры. Системная камера открывается, и я могу сделать снимок. Однако когда я выбираю изображение (чтобы вызвать событие OnFinishTakingPicture), приложение вылетает. Сообщения об ошибках нет — приложение просто перезапускается, как будто я запустил его снова.
И вот в чем особенность: это происходит не каждый раз. После нескольких повторов (3–4 попытки) или перезапуска приложения процесс фотосъемки работает нормально. Как только все заработает, оно продолжит работать, пока я не перезапущу приложение.
Чтобы последовательно воспроизвести проблему:
  • Удалите приложение.
  • Установите его заново.
  • Сделайте фотографию при первом запуске.
    В этом сценарии сбой происходит каждый раз.
  • li>
Расследования так далеко:
Что работает
Пример приложения от Embarcadero отлично работает на устройстве Xiaomi. Осознав это, я проверил несколько вещей:
Права доступа
Сначала я подумал, что это проблема. с правами доступа или манифестом Android. Я обновил все, чтобы соответствовать демо-проекту. Я также обнаружил, что вам на самом деле не нужны разрешения камеры при использовании системного диалога камеры. Интересно, но это не помогло — проблема все еще возникает.
Ошибка в FMX.MediaLibrary.Android
Затем я более подробно изучил код TAction.TakePhoto. Я отследил его до FMX.MediaLibrary.Android. Я исследовал два ключевых метода:

Код: Выделить всё

TakePhoto
передает необходимые данные в FActivityClient.TakePhoto(LRequestParams);, который реализован в файле JAR. Это всегда работает так, как ожидалось: открывается диалоговое окно системной камеры.
Метод onResponse вызывается каждый раз, когда диалоговое окно камеры закрывается, даже при сбое приложения. В случае сбоя приложения сначала запускается Application.Run, затем TPhotoActivityResponseListener.onResponse. Но когда приложение выходит из строя, LParams.OnDidFinishTaking недействителен, поскольку приложение перезапускается. Так что здесь все выглядит нормально — никаких очевидных проблем.
Управление энергопотреблением
Это похоже на какую-то проблему экономии заряда батареи. Возможно, Android пытается освободить ресурсы и закрывает мое приложение, пока камера открыта. Чтобы проверить это, я вручную установил APK и отключил всю оптимизацию батареи для своего приложения. Сбой все равно произошел.
Файлы журналов
Я также проверил журналы ADB. Каждый раз, когда происходит сбой, регистрируется определенное сообщение, но я не смог найти никакой информации об этом в Интернете и не знаю, является ли это проблемой или нет. Вот фрагмент логов:

Код: Выделить всё

2025.01.23 09:48:27.293 W   5929    System.err  org.json.JSONException: No value for cannong
2025.01.23 09:48:27.298 W   5929    System.err  at org.json.JSONObject.get(JSONObject.java:398)
2025.01.23 09:48:27.298 W   5929    System.err  at org.json.JSONObject.getJSONObject(JSONObject.java:618)
2025.01.23 09:48:27.298 W   5929    System.err  at android.util.MiuiMultiWindowUtils.initFreeFormResolutionArgsOfDevice(MiuiMultiWindowUtils.java:1436)
2025.01.23 09:48:27.298 W   5929    System.err  at android.util.MiuiMultiWindowUtils.initFreeFormResolutionArgs(MiuiMultiWindowUtils.java:1430)
2025.01.23 09:48:27.298 W   5929    System.err  at android.util.MiuiMultiWindowUtils.(MiuiMultiWindowUtils.java:212)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.DecorViewMultiWinStubImpl.(DecorViewMultiWinStubImpl.java:19)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.DecorViewMultiWinStubImpl$Provider.provideNewInstance(DecorViewMultiWinStubImpl$Provider.java:14)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.DecorViewMultiWinStubImpl$Provider.provideNewInstance(DecorViewMultiWinStubImpl$Provider.java:8)
2025.01.23 09:48:27.298 W   5929    System.err  at com.miui.base.MiuiStubRegistry.get(MiuiStubRegistry.java:129)
2025.01.23 09:48:27.298 W   5929    System.err  at com.miui.base.MiuiStubUtil.newInstance(MiuiStubUtil.java:77)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.DecorViewMultiWinStub.newInstance(DecorViewMultiWinStub.java:11)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.DecorView.(DecorView.java:335)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.PhoneWindow.generateDecor(PhoneWindow.java:2380)
2025.01.23 09:48:27.298 W   5929    System.err  at com.android.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2760)
2025.01.23 09:48:27.299 W   5929    System.err  at com.android.internal.policy.PhoneWindow.getDecorView(PhoneWindow.java:2140)
2025.01.23 09:48:27.299 W   5929    System.err  at android.view.Window.findViewById(Window.java:1516)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.Activity.findViewById(Activity.java:3492)
2025.01.23 09:48:27.299 W   5929    System.err  at com.embarcadero.firemonkey.keyboard.VirtualKeyboardFrameObserver.(VirtualKeyboardFrameObserver.java:56)
2025.01.23 09:48:27.299 W   5929    System.err  at com.embarcadero.firemonkey.keyboard.VirtualKeyboard.(VirtualKeyboard.java:41)
2025.01.23 09:48:27.299 W   5929    System.err  at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:125)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.Activity.performCreate(Activity.java:8176)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.Activity.performCreate(Activity.java:8143)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3752)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3946)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:106)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
2025.01.23 09:48:27.299 W   5929    System.err  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2324)
2025.01.23 09:48:27.299 W   5929    System.err  at android.os.Handler.dispatchMessage(Handler.java:106)
2025.01.23 09:48:27.300 W   5929    System.err  at android.os.Looper.loopOnce(Looper.java:210)
2025.01.23 09:48:27.300 W   5929    System.err  at android.os.Looper.loop(Looper.java:299)
2025.01.23 09:48:27.300 W   5929    System.err  at android.app.ActivityThread.main(ActivityThread.java:8273)
2025.01.23 09:48:27.300 W   5929    System.err  at java.lang.reflect.Method.invoke(Native Method)
2025.01.23 09:48:27.300 W   5929    System.err  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
2025.01.23 09:48:27.300 W   5929    System.err  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)
Итак, после всего этого у меня заканчиваются идеи, как решить эту проблему. На этом этапе создается впечатление, что Android завершает некоторые фоновые процессы, что приводит к сбою моего приложения. Возможно, это происходит потому, что мое приложение использует больше оперативной памяти по сравнению с простым демонстрационным приложением, например, предоставленным Emba. Есть ли у кого-нибудь еще опыт решения этой проблемы или какие-либо предложения о том, как двигаться дальше? Любая помощь будет принята с благодарностью.

Подробнее здесь: https://stackoverflow.com/questions/793 ... android-12
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»