怎么判断当前的屏幕方向是横屏还是竖屏

我看了文档
使用device.width和device.height两方法得到的值在横屏和竖屏模式下都是1080与2400,机型红米k30s,系统 澎湃OS

在Auto.js中,要判断当前屏幕的方向(横屏或竖屏)可以通过监听系统的旋转角度来实现。尽管device.widthdevice.height返回的值是固定的,有时可能在某些设备上不准确,因此可以通过其他方式来判断屏幕方向。

方法一:使用 getRotation() 函数

Auto.js 提供了 device.getRotation() 方法来获取当前的屏幕旋转状态。这个方法返回值通常为以下几种情况:

  • 0:竖屏
  • 1:横屏(右横)
  • 2:逆横屏
  • 3:反向竖屏

你可以根据这个返回值来判断当前是横屏还是竖屏。

let orientation = device.getRotation();

if (orientation === 0 || orientation === 2) {
    console.log("当前为竖屏");
} else if (orientation === 1 || orientation === 3) {
    console.log("当前为横屏");
}

方法二:使用宽高比较

虽然你的设备返回的 device.widthdevice.height 是固定的,但一般情况下,横屏模式下,宽度会大于高度,因此可以通过比较这两个值来判断屏幕方向。

let width = device.width;
let height = device.height;

if (width > height) {
    console.log("当前为横屏");
} else {
    console.log("当前为竖屏");
}

方法三:使用 getDisplayMetrics()

某些版本的Auto.js中,你可能还可以使用 getDisplayMetrics() 函数来获取更详细的屏幕信息,包括目前的宽高和密度相关的信息,虽然通常 widthheight 在某些设备上存在不准确的情况。

let metrics = device.getDisplayMetrics();
let width = metrics.widthPixels;
let height = metrics.heightPixels;

if (width > height) {
    console.log("当前为横屏");
} else {
    console.log("当前为竖屏");
}

总结

尝试以上方法中的任意一个来判断当前屏幕的方向,希望这能解决你的问题!

你所提供的两个新函数文档里都没有,运行后分别有一下报错信息
20:26:13.718/E: TypeError: Cannot find function getRotation in object Device{width=1080, height=2400, buildId='UKQ1.231003.002', buildDisplay='UKQ1.231003.002 release-keys', product='apollo', board='apollo', brand='Redmi', device='apollo', model='M2007J3SC', bootloader='unknown', hardware='qcom', fingerprint='Redmi/apollo/apollo:14/UKQ1.231003.002/V816.0.24.5.27.DEV:user/release-keys', sdkInt=34, incremental='V816.0.24.5.27.DEV', release='14', baseOS='', securityPatch='2024-05-01', serial='unknown'}. ([remote]测试#1)
TypeError: Cannot find function getRotation in object Device{width=1080, height=2400, buildId='UKQ1.231003.002', buildDisplay='UKQ1.231003.002 release-keys', product='apollo', board='apollo', brand='Redmi', device='apollo', model='M2007J3SC', bootloader='unknown', hardware='qcom', fingerprint='Redmi/apollo/apollo:14/UKQ1.231003.002/V816.0.24.5.27.DEV:user/release-keys', sdkInt=34, incremental='V816.0.24.5.27.DEV', release='14', baseOS='', securityPatch='2024-05-01', serial='unknown'}.
at [remote]测试:1:0

20:27:05.455/E: TypeError: Cannot find function getDisplayMetrics in object Device{width=1080, height=2400, buildId='UKQ1.231003.002', buildDisplay='UKQ1.231003.002 release-keys', product='apollo', board='apollo', brand='Redmi', device='apollo', model='M2007J3SC', bootloader='unknown', hardware='qcom', fingerprint='Redmi/apollo/apollo:14/UKQ1.231003.002/V816.0.24.5.27.DEV:user/release-keys', sdkInt=34, incremental='V816.0.24.5.27.DEV', release='14', baseOS='', securityPatch='2024-05-01', serial='unknown'}. ([remote]测试#1)
TypeError: Cannot find function getDisplayMetrics in object Device{width=1080, height=2400, buildId='UKQ1.231003.002', buildDisplay='UKQ1.231003.002 release-keys', product='apollo', board='apollo', brand='Redmi', device='apollo', model='M2007J3SC', bootloader='unknown', hardware='qcom', fingerprint='Redmi/apollo/apollo:14/UKQ1.231003.002/V816.0.24.5.27.DEV:user/release-keys', sdkInt=34, incremental='V816.0.24.5.27.DEV', release='14', baseOS='', securityPatch='2024-05-01', serial='unknown'}.
at [remote]测试:1:0

在Android中,你可以通过调用系统API来判断当前屏幕的方向。下面是通过Auto.js脚本获取当前屏幕方向的方法:

// 获取上下文
var context = app.context;

// 获取当前显示的屏幕方向
var rotation = context.getResources().getConfiguration().orientation;

if (rotation == 1) { // ORIENTATION_PORTRAIT
    log("当前屏幕方向: 竖屏");
} else if (rotation == 2) { // ORIENTATION_LANDSCAPE
    log("当前屏幕方向: 横屏");
} else {
    log("当前屏幕方向: 未知");
}

说明:

  1. context.getResources().getConfiguration().orientation 可以获取到当前屏幕的方向。
  2. 当返回值是 1 的时候,表示竖屏(PORTRAIT);返回值是 2 表示横屏(LANDSCAPE)。
  3. 你可以根据需要在脚本中添加更多逻辑处理。

注意:

确保你的Auto.js脚本具备足够的权限,否则可能无法访问这些系统API。如果遇到问题,请查看Auto.js的文档,检查是否有相关权限需要申请。

这个方法可以准确地获取当前屏幕的方向,适用于判断用户界面的布局应该如何适配。希望这能帮助你解决问题!

解决问题了吗,回复一声

// 获取资源对象
var resources = context.getResources();

// 获取配置对象
var config = resources.getConfiguration();

// 获取横屏:2 竖屏:1
var orientation = config.orientation;