如何在 Froyo 中检测设备的准确方向?

2023-12-01

我试图暂时锁定 Android 设备的方向,大多数时候它会随着传感器的变化而变化。所以我想做的是弄清楚当前的方向(横向、反向横向、纵向、反向纵向)是什么,将方向更改为该方向,然后将其改回原来的方向。

我知道我可以使用诸如 int 方向 = this.getResources().getConfiguration().orientation; this.setRequestedOrientation(方向); 问题在于,通常将相关方向设置为“未定义”或“用户”或“传感器”,这对我没有帮助。如何找出屏幕的四个可能侧面中的哪一个是“向下”的?

我知道 getRotation(),如下所述:如何检测Android设备的方向?

问题是我可以从设备的“自然”方向找出实际旋转(0、90、180、270 度)......但如果我不知道原始方向是什么,这对我没有帮助是。

如何找出设备转向的方向,以便我可以暂时将设备固定到该方向?

UPDATE

不,这不是一个重复的问题。 我怀疑不同设备上可能有不同的行为,但不能确定。 我做了更多的实验和研究。我曾以为由于某种原因 getConfiguration().orientation 返回“未指定”。我误解了。它确实返回横向或纵向。

但问题就在这里。直到 Gingerbread(2.3,API 9)才添加了 REVERSE 横向和反向纵向。

因此,例如,如果设备处于反向横向模式,则 getConfiguration.orientation 会告诉我它处于横向模式。然后,当我将请求的方向设置为横向时,屏幕会上下翻转。

我没有意识到这在 Froyo 中更困难,所以我将重新表述我之前阐明的问题:

在Froyo中,如何检测设备是横向、反向横向、纵向还是反向纵向?

这些建议列出了所有工作——Gingerbread 或更高版本。


我修改了DIY主义的答案在另一个职位上为 Froyo 工作。由于Froyo不支持reverse_landscape,它会显示颠倒,但解锁后会恢复到正确的方向。在 Gingerbread 及更高版本中它应该可以正常工作。

这不是一个完美的解决方案,但足以满足我的需求。

public static void disableRotation(Activity activity)
{       
    final int orientation = activity.getResources().getConfiguration().orientation;
    final int rotation = activity.getWindowManager().getDefaultDisplay().getOrientation();

    // Copied from Android docs, since we don't have these values in Froyo 2.2
    int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
    int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
    {
        SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
        SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    }

    if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
    {
        if (orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if (orientation == Configuration.ORIENTATION_LANDSCAPE)
        {
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    }
    else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) 
    {
        if (orientation == Configuration.ORIENTATION_PORTRAIT) 
        {
            activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if (orientation == Configuration.ORIENTATION_LANDSCAPE) 
        {
            activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }
    }
}

public static void enableRotation(Activity activity)
{
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Froyo 中检测设备的准确方向? 的相关文章

随机推荐

  • 如何在 pyqt5 中将鼠标悬停在按钮上时显示工具提示图像

    我想将鼠标悬停在按钮上时显示图像 但是 pyqt5 工具提示参考仅包含文本 我怎样才能做到这一点 我想动态地执行 for 循环元素 如下所示 我需要完成 code def createButtons self for d name in d
  • Backbone & Slim PHP - Access-Control-Allow-Headers - 可以获取信息,不能发布信息吗?

    我正在使用 Backbone 和 Slim PHP 框架 我正在尝试将信息发布到我的 API 但是 Access Control Allow Headers 不断给我带来问题 我的控制台显示 OPTIONS http api barholl
  • 无法使用System.IO.Compression.FileSystem.dll

    我正在尝试让这个 Powershell 代码正常工作 Add Type Path C Program Files x86 Reference Assemblies Microsoft Framework NETFramework v4 5
  • SQL Server:删除表级联等效吗?

    在 Oracle 中 要删除所有表和约束 您可以输入类似的内容 DROP TABLE myTable CASCADE CONSTRAINTS PURGE 这将完全删除表及其依赖项 SQL服务器相当于什么 在 SQL Server Manag
  • 如何判断 net/http 的 ResponseWriter.Write() 是否已被调用?

    假设我有一系列 net http 处理程序 并且早期的处理程序响应 HTTP 错误 http StatusInternalServerError 例如 如何在以下处理程序中检测到这一点 并避免向客户端发送额外的数据 或者这完全是错误的解决问
  • Anagrams - C 中的链式哈希和探测

    我的标题被编辑了 所以我想确保每个人都知道这是作业 问题只是优化程序 散列是我的想法 我正在优化一个 C 程序 该程序将彼此不同的单词组合在一起 然后将它们打印出来 目前的程序基本上是一个链表的链表 外部列表中的每个链接都是一组彼此不同的单
  • 当发生错误 1224: ERROR_USER_MAPPED_FILE 时?

    我想真正了解什么时候ERROR USER MAPPED FILE发生 所以我写了一些片段 重现错误 但这没有用 请帮我修复我的代码 流程一 HANDLE hFile CreateFile C test full exe GENERIC RE
  • 如何获取返回集中每行空值列的计数?

    我正在寻找一个查询 该查询将在当前查询的末尾返回一个额外的列 该列是返回集中包含空列的所有列的计数 例如 Col 1 Col 2 Col 3 A B 0 A NULL 1 NULL NULL 2 是否有一种简单的方法可以根据行值获取此返回集
  • 如何让 Capture::Tiny 在失败时打印 stderr 和 stdout?

    我正在尝试通过Capture Tiny在失败时获取命令的输出 usr bin env perl use strict use warnings use feature say use Carp confess use Capture Tin
  • http响应文本获取不完整的html

    我在 excel vba 中有一个代码 如下所示 可以获取网页源 html 该代码工作正常 但它获取的 html 不完整 当线webpageSource oHttp ResponseText执行后 变量webpageSource包含 DOC
  • 如何创建具有延迟和尝试限制的 RXjs RetryWhen

    我正在尝试进行 API 调用 使用 angular4 当失败时使用 retryWhen 重试 我希望它延迟 500 毫秒 然后重试 这可以通过以下代码来实现 loadSomething Observable
  • ggplot2在标记刻度线之间显示未标记刻度线

    我在直方图上显示小刻度线时遇到问题 我尝试过绘制未标记的主要刻度线的想法 但刻度线不会显示 我的代码非常麻烦 可能有一些多余的行 任何帮助 将不胜感激 ggplot data Shrimp1 aes Shrimp1 Carapace Len
  • 如何在模态视图解除时传递对象

    我以模态方式呈现 VC 然后在选择单元格并从原始 VC 调用方法时将其关闭 现在的问题是nav and routineTableViewControllerNSLog 为空 我如何展示 VC 模型 NSString selectedRow
  • 如何使用expect通过ssh连接到系统并更改主机系统的密码?

    我正在自动化以下过程 通过 ssh 连接到名为 alpha 的系统 用户名 alpha 的密码为 alpha 连接后 我想设置 root 密码 kickass 我连接的系统默认没有 root 密码 我编写了这个期望脚本来完成这项工作 但它不
  • MKMapView 中显示用户位置的不稳定行为

    我有一个MKMapView与MKUserTrackingBarButtonItem 用户的当前位置只能显示在Follow or FollowWithHeading模式 实现如下所示 void mapView MKMapView mapVie
  • JavaScript 中的检查可返回我是否在智能手机上? [复制]

    这个问题在这里已经有答案了 我想对我的一个 JavaScript 函数进行检查 确定我是否在智能手机上 然后根据结果决定是否运行该函数 在 JavaScript 中检测 检查智能手机 或一般手持设备 的最佳方法是什么 e g if user
  • 显示:块内显示:内联

    我想了解当 CSS 为的元素时会发生什么display block是 CSS 为的元素的 DOM 子元素display inline 这样块元素是内联元素的子元素 这种情况在匿名块盒CSS 2 1 规范部分 示例包括以下规则 body di
  • iOS:可以在 Google Plus 中发送或发布消息

    在 google plus 中 是否有一个 API 可以在 iOS 中向 Google Plus 发送消息或提交帖子 我已经尝试阅读 google 文档 但还没有看到任何可以做到这一点的内容 好的 我明白了 在他们的文档上 https de
  • 结构成员的概念检查

    检查特定结构成员是否验证给定概念的简单 惯用的方法是什么 我尝试了以下方法 但它不起作用 因为 T f 产量类型float include
  • 如何在 Froyo 中检测设备的准确方向?

    我试图暂时锁定 Android 设备的方向 大多数时候它会随着传感器的变化而变化 所以我想做的是弄清楚当前的方向 横向 反向横向 纵向 反向纵向 是什么 将方向更改为该方向 然后将其改回原来的方向 我知道我可以使用诸如 int 方向 thi