如何在FireMonkey Android应用中检测Samsung DeX桌面模式?
检测Samsung DeX模式的可靠方法(Delphi FMX Android)
一、通过Android原生API检测(推荐)
Delphi可直接调用Android系统服务或读取系统属性来判断是否处于DeX模式,这是比分辨率检测更可靠的方案:
1. 读取三星DeX专属系统属性
三星DeX激活时会设置专属系统属性,可直接读取判断:
uses Androidapi.JNI.Os; function IsSamsungDeXActive: Boolean; var DexProp: JString; begin // 读取DeX专属系统属性,默认返回false DexProp := TJOSBuild.JavaClass.getSystemProperty('ro.samsung.dex.active', 'false'); Result := DexProp.Equals('true'); end;
2. 通用桌面窗口模式检测(Android 10+)
Android 10及以上系统支持直接检测窗口模式,可覆盖DeX及其他厂商桌面模式:
uses Androidapi.JNI.View, Androidapi.JNI.App, Androidapi.Helpers; function IsInDesktopWindowMode: Boolean; var WindowManager: JWindowManager; WindowMetrics: JWindowMetrics; WindowInsets: JWindowInsets; begin Result := False; // 仅支持Android 10(API 30)及以上版本 if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then begin WindowManager := TJWindowManager.Wrap( TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WINDOW_SERVICE)); WindowMetrics := WindowManager.getCurrentWindowMetrics; WindowInsets := WindowMetrics.getWindowInsets; // 判断是否为桌面窗口模式 Result := (WindowInsets.getWindowingMode = TJWindowInsets.JavaClass.WINDOWING_MODE_DESKTOP); end; end;
3. 多窗口模式兼容(旧版本Android)
对于Android 10以下的设备,可通过多窗口模式间接判断(DeX激活时会进入多窗口模式):
uses Androidapi.JNI.App, Androidapi.Helpers; function IsInMultiWindowMode: Boolean; var ActivityManager: JActivityManager; Configuration: JConfiguration; begin Result := False; ActivityManager := TJActivityManager.Wrap( TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); Configuration := ActivityManager.getConfiguration; Result := Configuration.isInMultiWindowMode; end;
二、整合检测逻辑
结合三种方法,覆盖所有版本和场景:
function CheckDesktopMode: Boolean; begin // 优先检测DeX专属属性,最准确 Result := IsSamsungDeXActive; if Result then Exit; // 其次检测Android 10+的桌面窗口模式 if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then begin Result := IsInDesktopWindowMode; if Result then Exit; end; // 最后兼容旧版本的多窗口模式检测 Result := IsInMultiWindowMode; end;
三、FMX适配建议
检测到DeX模式后,可针对性调整UI:
- 切换桌面级布局:使用
TGridPanelLayout、TSplitter实现分栏式布局,适配鼠标操作 - 放大控件尺寸:增大字体、按钮大小,提升桌面端操作体验
- 启用窗口特性:允许用户调整窗口大小(FMX在Android多窗口模式下默认支持,可优化边界判断)
内容的提问来源于stack exchange,提问作者user31362432
相关产品推荐
相关产品推荐

