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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:39:50