屏幕关闭时接近传感器不起作用?

2024-05-07

Hy,

我有一个与接近传感器相关的问题。当我将手指放在上面时,我想关闭屏幕,当我拿开手指时,我想打开屏幕。 我成功地完成了关闭部分,但是当我将手指从传感器上移开时,它似乎没有执行 onSensorChanged 方法。这是它的代码:

public void onSensorChanged(SensorEvent event) {
        float distance = event.values[0];
        boolean active = (distance >= 0.0 && distance < PROXIMITY_THRESHOLD && distance < event.sensor.getMaximumRange());
        boolean isValidCallState = false;

        if (callsInfo != null) {
            for (SipCallSession callInfo : callsInfo) {
                int state = callInfo.getCallState();
                isValidCallState |= ((state == SipCallSession.CallState.CONFIRMED)
                        || (state == SipCallSession.CallState.CONNECTING)
                        || (state == SipCallSession.CallState.CALLING) || (state == SipCallSession.CallState.EARLY && !callInfo
                        .isIncoming()));
            }
        }
        if (isValidCallState && active) {
            Log.e("", "turn off");
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
            lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;

            getWindow().setAttributes(lp);
            lockOverlay.show();
        } else {
            Log.e("", "turn on");
            WindowManager.LayoutParams lp = getWindow().getAttributes();

            lp.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
            lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
            getWindow().setAttributes(lp);
        }
        Log.e("", "turn ???"); // --> does not print this when releasing the sensor
    }

有任何想法吗?谢谢。


我找到了问题的答案,并设法弄清楚了接近传感器的主要流程。

首先,有两种处理接近传感器的方法: 1. 对 PROXIMITY_SCREEN_OFF_WAKE_LOCK 进行锁定。从我读到的内容来看,这是android使用的一个隐藏常量,其值为32(至少目前是这样——在未来的版本中可能会或可能不会改变)。如果锁定成功,接近传感器将像您在通话中一样工作。

try {
                    Method method = powerManager.getClass().getDeclaredMethod(
                            "getSupportedWakeLockFlags");
                    int supportedFlags = (Integer) method.invoke(powerManager);
                    Field f = PowerManager.class.getDeclaredField("PROXIMITY_SCREEN_OFF_WAKE_LOCK");
                    int proximityScreenOffWakeLock = (Integer) f.get(null);
                    if ((supportedFlags & proximityScreenOffWakeLock) != 0x0) {
                        proximityWakeLock = powerManager.newWakeLock(proximityScreenOffWakeLock,
                                "com.voalte.CallProximity");
                        proximityWakeLock.setReferenceCounted(false);
                    }

                } catch (Exception e) {
                }
  1. 为传感器注册一个侦听器。在这种情况下,接近传感器操作必须在 onSensorChanged 方法中处理(可以设置屏幕亮度)。

Note:

  1. 当屏幕关闭时,onPause 被调用。
  2. 如果您使用第一种方法,您应该考虑也有一个备份,以防无法设置 PROXIMITY_SCREEN_OFF_WAKE_LOCK。因此,我建议尝试在 onStart 和 onResume 中实例化锁,以检查其是否为空。如果不为空,则获取锁,否则为传感器注册侦听器。
  3. 在 onSensorChanged 中,我将屏幕亮度设置为 BRIGHTNESS_OVERRIDE_OFF,当覆盖传感器和释放时,我将屏幕亮度设置为 BRIGHTNESS_OVERRIDE_FULL 和/或 BRIGHTNESS_OVERRIDE_NONE,但它没有打开屏幕。因此,解决方法是使默认设置为不可见的黑色布局变得可见并占据整个屏幕。

希望这对某人有帮助。

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

屏幕关闭时接近传感器不起作用? 的相关文章

  • 随着手指的滑动改变活动

    我想知道如何通过滑动手指来更改活动 或者从右向左滑动手指并更改活动 就像我们在智能手机上看到图片的方式一样 有人知道吗 Cumpz 请参阅以下链接 http savagelook com blog android swipes or fli
  • 使用 android 将图像上传到 Flickr

    我需要将 Flickr 与 android 集成 我已完成身份验证 我需要将图像上传到 flickr 但我不知道如何执行相同操作 我参考文件 http www flickr com services api upload api html
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 如何创建没有标题的DialogFragment?

    我正在创建一个 DialogFragment 来显示一些有关我的应用程序的帮助消息 除了一件事之外 一切都工作正常 窗口顶部有一条黑色条纹 显示 DialogFragment 我认为它是为标题保留的 我不想使用它 这是特别痛苦的 因为我的自
  • 清除堆内存以防止内存不足异常

    我知道已经有人问过有关内存不足的问题 但我没有找到解决方案 在位图工厂中 我出现内存不足异常 甚至使用 inSampleSize 1 所以我经常用 try catch 内存不足异常来包围它 因为这是一个不好的做法 try catch Out
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • Android 操作栏 SearchView 作为自动完成功能?

    我在操作栏中使用 SearchView 我想在搜索视图上使用自动完成功能来从数据库中获取结果 这可能吗 或者我是否需要使用自定义文本框 然后添加自动完成功能 所以我只需要对 v7 版本执行此操作 并沮丧地发现我不能简单地使用 ArrayAd
  • Android 偏好设置中的“是”或“否”确认[重复]

    这个问题在这里已经有答案了 我需要在 设置 中实现 重置 选项 单击该设置后 将打开一个简单的对话框 要求确认 我看过了DialogPreference但我似乎无法在任何地方找到好的解决方案或教程 有人可以帮我吗 我是初学者 想法甚至代码都
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • Ionic4 电容器 android livereload?

    是否有可能在带有 livereload 的 Android 设备上运行带有电容器的 ionic 4 应用程序 我已经找了几个小时的答案了 但没有成功 请帮忙 如果使用最新版本 ionic cli 现在有一个命令ionic capacitor
  • Google Play 服务,登录成功,但创建房间时出错

    我正在尝试 google play 服务示例 特别是 ButtonClicker2000 从 logcat 登录过程也正常 但我有另一个错误 06 01 22 43 15 478 D ButtonClicker2000 1565 Sign
  • Horizo​​ntalScrollView 将 GridView 缩小为小行

    当我将 Horizo ntalScrollView 放在 GridView 周围时 GridView 会被压缩到左侧的一个小列中 Gridview 的垂直滚动条甚至出现在左侧 Horizo ntalScrollView 的宽度设置为 fil
  • android gradle插件-离线安装

    我必须在离线电脑上安装 android gradle 插件 通过谷歌搜索 我了解到我可以通过本地 Maven 存储库来做到这一点 但从不成功的尝试和所有关于这个问题的质量保证中我知道这并不简单 我从来没有和maven一起工作过 有经验的人可
  • 如何解决Android错误类型3?

    下面是我在项目中使用的清单格式 但是每当我尝试运行模拟器时 我都会收到下面提到的错误 请给我一个解决该错误的准确解决方案 工具信息 Android studio Nexus S API 22 android 5 1 1 我的清单文件格式
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 如何在捆绑中存储稀疏数组

    我有一个SparseArray
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • Android 模拟器提示和技巧 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 手动添加带有依赖pom/iml文件的aar

    由于我无法使用私人 Maven 来共享我的库 因此我正在考虑共享 aar 并导入到另一个项目中 当 aar 和 jar 文件不包含任何依赖项时 就会出现问题 因此 一旦我在android studio中手动导入aar 使用Import JA
  • 如何获取视图到手机底部的距离?

    如果我在布局上有某个视图 ImageView 例如 是否可以找到View的下边框到手机屏幕底部的距离 Thanks instantiate DisplayMetrics DisplayMetrics dm new DisplayMetric

随机推荐

  • 从 html 链接在移动设备上打开应用程序

    我有一个包含我的社交媒体帐户的 html 页面 我希望当我单击这些链接时可以转到我在这些社交媒体应用程序上的个人资料 例如 Skype a href My Skype a 当我在移动设备上点击此链接时 它会打开 Skype 并转到我的帐户
  • Mac 监听事件:复制到粘贴板

    我正在阅读 NSPasteboard 然后想找到 我试图找到正确的通知方法来侦听数据复制到剪贴板的事件 我还试图找到复制到剪贴板的数据的文件路径 这将是一个粘贴板对象 如果我从浏览器中的页面复制文本 我会尝试找出如何获取复制文本的页面的 U
  • 高图表重叠类别标签

    我需要有关 xAxis 类别标签问题的帮助 当没有空间容纳所有类别标签时 它们就会挤在一起并相互重叠 我搜索过是否可以找到某种方法来确保这种情况不会发生 首先我寻找滚动解决方案 然后进行某种缩放 最后我尝试使用 staggerLines 问
  • 具有 TINYTEXT 列的 CREATE TABLE 语句中出现语法错误 1064?

    这是我到目前为止的 MySQL 代码 CREATE DATABASE bankbase USE bankbase CREATE TABLE clienttable ClientID SMALLINT 15 NOT NULL DEFAULT
  • 分支 ASP.NET Core 管道身份验证

    我的应用程序当前正在使用基本身份验证 但我想转换到 OAuth 因此在短时间内需要使用两种类型的身份验证 有没有办法像这样分支我的 ASP NET Core 管道 public void Configure IApplicationBuil
  • 编程语言解析器的来源?

    我正在清理我的一个旧项目 该项目计算有关大型软件项目的许多简单指标 指标之一是文件 类 方法的长度 目前 我的代码 猜测 类 方法边界的位置基于非常粗略的算法 遍历文件 维护 当前深度 并在遇到未加引号的括号时调整它 当您返回到类或方法开始
  • style.css 在 WordPress 中不起作用

    我的 WordPress 有问题 我已经创建了所有需要的文件 包括 style css index php 等 但页面没有样式 在标题中 除其他外 我把这个
  • 使用 proto.io 让开关在 IE8 中工作

    Proto io 为使用 CSS 的开 关切换按钮提供了一个非常好的解决方案 但是 它在 IE8 中不起作用 http proto io freebies onoff http proto io freebies onoff 有谁知道如何用
  • 需要使用 Node.js 压缩整个目录

    我需要使用 Node js 压缩整个目录 我目前正在使用node zip 每次该进程运行时都会生成一个无效的ZIP文件 正如您可以从这个 Github 问题 https github com Stuk jszip issues 41 是否有
  • 如何像java中的make一样程序化生成塞尔达传说

    我将如何用java制作程序生成的地图 游戏本身就像塞尔达传说是程序生成的 有帮助吗 不久前的 塞尔达传说 地图使用等距平铺视图 您需要做的第一件事是将等距图块集加载到您的程序中 我确信您可以找到塞尔达图块集 然后 您需要决定如何按程序生成地
  • Jsch:命令输出不可用

    我正在尝试使用 jsch 连接到远程交换机并运行一些命令并提取输出 我可以使用 连接到交换机 但是命令输出在输入流中不可用 也许我没有以正确的方式做这件事 这是代码 session jsch getSession user 10 0 0 0
  • 如何在postman中从JSONArray获取JSONobject

    我正在尝试使用测试脚本自动化邮递员中的注册场景 我有以下 JsonArray 作为响应 id 1 name user A cntkp martin company kreativ tel 12345678 email email prote
  • Django:djcelery 从 celery import current_app as celery in virtualenv 导入错误

    好吧 我已经尝试了我和谷歌能想到的一切 我正在尝试在 Macbook Pro OSX 10 8 4 上的 virtualenv 下运行 django celery 我在激活 virtualenv 时使用 pip 安装了 django cel
  • 如何在 Vue.js 中排除文件(例如配置文件)?

    https cli vuejs org config configurewebpack https cli vuejs org config configurewebpack https cli vuejs org config chain
  • Windows 8 SDK 中的 DirectX

    Summary 是否应该从针对 Windows 8 的应用程序中删除 directX 包含文件 Details 我是 Windows 开发新手 我正在尝试使用 Visual Studio 2012 如果可能 在 Windows 8 上编译
  • 如何在 F# 中捕获任何异常(System.Exception)而不发出警告?

    我试图捕获异常 但编译器给出警告 此类型测试或向下转型将始终保持 let testFail try printfn Ready for failing failwith Fails with System ArgumentException
  • 是否有一个 clojure 函数可以“连接”两个地图列表?

    我正在寻找一个类似于sql中的join的连接函数 例如 这是两个地图列表 def a user id 1 name user 1 user id 2 name user 2 def b user id 2 email e 2 user id
  • 如何读取/理解目标主机上的ansible日志(由syslog编写)

    当你在某个主机上执行 ansible 时 它 会写入该主机上的 syslog 如下所示 Dec 1 15 00 22 run tools python ansible
  • 如何在 Python 中的每个单元测试之前和之后运行特定代码

    以下是我在文件中的测试的结构 Class setup 测试01测试02测试03拆除 我需要在每次测试之前和之后运行特定的代码 以前 我可以从设置中调用该代码 但在测试之后 我不知道该怎么做 显然 从拆卸中调用代码对于最后一个测试是有效的 但
  • 屏幕关闭时接近传感器不起作用?

    Hy 我有一个与接近传感器相关的问题 当我将手指放在上面时 我想关闭屏幕 当我拿开手指时 我想打开屏幕 我成功地完成了关闭部分 但是当我将手指从传感器上移开时 它似乎没有执行 onSensorChanged 方法 这是它的代码 public