使用 Javascript 在 Android 中抑制/检测旋转

Suppress / detect rotation in Android using Javascript

本文关键字:检测 旋转 Javascript Android 使用      更新时间:2023-09-26

我正在尝试围绕修改后的VNC查看器小程序(VNC =远程显示协议)实现包装器,以提供增强的用户体验(使用javascript),但在处理旋转时遇到了问题。

小程序的宽度/高度是固定的 (1) - 因此当用户旋转设备时,小程序会压低屏幕或调整大小:

+------------+   +-------+         +-------+
|............|   |.......|...      |.......|
|.         X.|   |.      | X. or   |.    x.|
|.          .| > |.      |  .      |.......|
|............|   |.......|...      |       |
+------------+   |       |         |       |
                 |       |         |       |
                 +-------+  :(     +-------+ :(

但我要....

+------------+   +-------+
|............|   |.......|
|.         X.|   |.     .|
|.          .| > |.     .|
|............|   |.     .|
+------------+   |.    X.|
                 |.......|
                 +-------+  :)

虽然我可以从 javascript 中屏幕尺寸的变化中检测到自动旋转,并且如果它是用 Java 编写的,我可以抑制自动旋转,但这些都没有达到我想要的结果:具体来说,

  • 旋转设备时,显示器的方向不会改变
  • 我的 JavaScript 会检测到设备已被旋转并重新定向小程序的内容(通过发送 OOB 消息以在 VNCServer 上运行 Xrandr)。

我并不完全反对将旋转检测作为暴露给 javascript 的单独小程序/通过 Web 视图实现页面,但不希望这样做。

是否可以在 html 应用清单文件中锁定方向?

当方向被锁定时,是否可以使用 javascript 检测旋转?

有没有其他方法可以解决这个问题?

1 - 这是底层协议的限制,我已经在对 Java 小程序进行更改,我真的不想重写服务器!

更新

我知道大多数版本的VNC(包括noVNC)都有xrandr的问题。

如果有人可以告诉我如何抑制浏览器页面的自动重新定向(不使用带有 Web 视图的小程序),那至少给了我部分答案。

我不完全确定我是否可能在这里错过了你的观点,但您可以通过在清单中添加以下行来防止设备在旋转或键盘滑出时重新布局:

android:configChanges="keyboardHidden|orientation"

然后,如果我理解正确,您可以在更改发生后让您的 javascript 简单地旋转小程序中的文本。

这将提供将窗口保持在上面指示的方向和大小的预期效果,由您自己来更正文本方向。

看看这个,似乎已经有人解决了这个问题:https://stackoverflow.com/a/2307936/375929

UPD Afaik,你不能从javascript强制执行方向的东西,但你可以检测旋转并在你的web应用程序中通过互补的旋转做出反应 - 所以你的web应用程序的方向对用户来说是一样的。