You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

小米Android12设备上Delphi应用TakePhotoAction崩溃重启求助

Delphi Android小米设备拍照后应用重启问题及Bitmap回调获取求助

环境

  • Delphi 12.2(最新SP版本)
  • 适配Android和iOS的跨平台应用
  • 测试硬件:Pixel 7a(Android 15)/小米Redmi(Android 12 SP1)

问题描述

仅小米设备出现该问题(其他品牌未测试),Pixel设备运行正常。项目流程为:先从API接口加载数据到本地SQLite数据库,再拍摄照片并与下载的数据关联保存。调用拍照的代码与Embarcadero官方示例完全一致:

procedure TPhotoForm.TakePicture(Sender: TObject);
begin
    if TOSVersion.Check(11) then
       ActionTakePhotoFromCamera.Execute;
end;

问题表现:调用拍照方法后系统相机正常打开,拍摄并选择照片触发OnFinishTakingPicture事件时,应用无报错直接重启。该问题并非每次出现:重试3-4次或重启应用后可正常工作,直到再次重启应用。稳定复现步骤:

  1. 卸载应用
  2. 重新安装
  3. 首次启动时拍摄照片,必现崩溃重启

已排查内容

  1. 权限配置:对比官方示例更新Android清单和权限,确认使用系统相机对话框无需相机权限,但问题仍存在。
  2. FMX代码追踪:跟踪TAction.TakePhoto至FMX.MediaLibrary.Android,检查TImageManagerAndroid.TakePhoto和TImageManagerAndroid.TPhotoActivityResponseListener.onResponse方法,未发现明显异常。
  3. 电池优化:禁用应用所有电池优化设置,问题仍存在。

补充发现与求助

问题根源锁定为小米内存优化机制:当应用内存占用在150-450MB时,打开系统相机后应用进入后台,可能被系统挂起;内存占用超过500MB时必现崩溃,甚至官方示例也能复现该问题。

官方示例中启动窗体包含ActionList,应用重启后可通过OnFinishEvent获取回调,但我的应用中启动窗体与调用拍照的窗体不是同一个,求助在此场景下如何正确获取拍摄的Bitmap?相关核心代码如下:

try
      LConverted := JBitmapToBitmap(LNativeBitmap, LBitmap);
      LNativeBitmap.recycle;

      if LConverted then
      begin
        if Assigned(LParams.OnDidFinishTaking) then
        begin
          log.d('OnDidFinishTaking is Assigned');
          LParams.OnDidFinishTaking(LBitmap)
        end
        else
        begin
          log.d('OnDidFinishTaking is not Assigned');
          LRequestKind := response.getRequestKind;

          if LRequestKind.equals(TJPhotoActivityRequestKind.JavaClass.PICK) then
            TMessageManager.DefaultManager.SendMessage(Self, TMessageDidFinishTakingImageFromLibrary.Create(LBitmap))
          else if LRequestKind.equals(TJPhotoActivityRequestKind.JavaClass.TAKE) then
            TMessageManager.DefaultManager.SendMessage(Self, TMessageDidFinishTakingImageFromCamera.Create(LBitmap));
        end;
      end;
    finally
      LBitmap.Free;
    end;

内容的提问来源于stack exchange,提问作者fisi-pjm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:46:11