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

在Termux中通过纯Node.js检测Android深色模式的方案咨询

Termux Node.js环境检测安卓深色模式实现方案

可行性结论

需求完全可以实现,无需依赖electron、phantom.js等任何渲染类库,仅通过调用安卓系统原生接口即可完成检测。

可用实现方案

方案1:读取系统设置数据库(适配Root/非Root环境)

安卓系统的深色模式状态存储在系统Settings数据库的ui_night_mode字段中,直接调用系统自带的content命令即可读取:

  • 执行命令:
    content query --uri content://settings/system --projection name:value --where "name='ui_night_mode'"
  • 返回结果对应状态:
    • 包含value=2:已开启深色模式
    • 包含value=1:已开启浅色模式
    • 包含value=0:跟随省电模式自动切换
      非Root设备需先通过adb给Termux授予读取系统设置权限:adb shell pm grant com.termux android.permission.READ_SETTINGS

方案2:通过Termux API读取(解析更简单)

如果已安装Termux API组件,可直接调用termux-settings命令读取,返回结果为纯数值更易解析:

  • 执行命令:
    termux-settings --get system ui_night_mode

Node.js调用示例

直接通过Node.js内置的child_process模块执行上述命令解析结果即可:

const { exec } = require('child_process');

/**
 * 检测当前系统是否开启深色模式
 * @returns {Promise<boolean>} 深色模式返回true,浅色返回false
 */
function isDarkModeEnabled() {
  return new Promise((resolve, reject) => {
    // 优先调用Termux API接口
    exec('termux-settings --get system ui_night_mode', (apiErr, apiStdout) => {
      if (!apiErr) {
        return resolve(apiStdout.trim() === '2');
      }
      // Fallback到系统content命令
      exec('content query --uri content://settings/system --projection name:value --where "name=\'ui_night_mode\'"', (cmdErr, cmdStdout) => {
        if (cmdErr) return reject(cmdErr);
        const modeMatch = cmdStdout.match(/value=(\d)/);
        resolve(modeMatch ? modeMatch[1] === '2' : false);
      });
    });
  });
}

// 调用示例
isDarkModeEnabled().then(isDark => {
  console.log('系统深色模式状态:', isDark ? '开启' : '关闭');
});

内容的提问来源于stack exchange,提问作者dev_null

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:06:03