UnregisterListener 不适用于 PROXIMITY_SCREEN_OFF_WAKE_LOCK

2023-12-22

我有这个代码

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager mSensorManager;
    private Sensor mProximity;
    private PowerManager mPowerManager;
    private PowerManager.WakeLock mWakeLock;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

        mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
            if (event.values[0] == 0) {
                //near
                Toast.makeText(getApplicationContext(), "near", Toast.LENGTH_SHORT).show();
                turnOffScreen();

            } else {
                //far
                Toast.makeText(getApplicationContext(), "far", Toast.LENGTH_SHORT).show();
                turnOnScreen();
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }


    public void turnOffScreen() {

            mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
            mWakeLock.acquire();

    }

    public void turnOnScreen() {

            mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
            mWakeLock.acquire();
    }

}

当应用程序处于睡眠状态或进行其他活动时,传感器仍然工作。 任何想法?


我采取了其他方法来解决这个问题,因为没有人知道如何解决这个问题,所以使用这段代码我不需要使用 SensorManager。现在我使用两个函数来启动和停止传感器,我认为这是唯一的解决方案。

import android.content.Context;
import android.os.PowerManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private PowerManager mPowerManager;
    private PowerManager.WakeLock mWakeLock;

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    }

    public void activateSensor(View v) {
        Toast.makeText(MainActivity.this, "Proximity On", Toast.LENGTH_LONG).show();
        if (mWakeLock == null) {
            mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "incall");
        }
        if (!mWakeLock.isHeld()) {
            Log.d(TAG, "New call active : acquiring incall (CPU only) wake lock");
            mWakeLock.acquire();
        } else {
            Log.d(TAG, "New call active while incall (CPU only) wake lock already active");
        }
    }

    public void deactivateSensor(View v) {
        Toast.makeText(MainActivity.this, "Proximity Off", Toast.LENGTH_LONG).show();
        if (mWakeLock != null && mWakeLock.isHeld()) {
            mWakeLock.release();
            Log.d(TAG, "Last call ended: releasing incall (CPU only) wake lock");
        } else {
            Log.d(TAG, "Last call ended: no incall (CPU only) wake lock were held");
        }
    }

}

这是我的activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.javier.proximitysensor.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/activity_main_turn_on_screen"
        android:onClick="activateSensor"
        android:text="@string/activity_main_activate_sensor" />

    <Button
        android:id="@+id/activity_main_turn_on_screen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:onClick="deactivateSensor"
        android:text="@string/activity_main_deactivate_sensor" />
</RelativeLayout>

谢谢...

您也可以在中查看此示例GitHub https://github.com/CabezasGonzalezJavier/ProximitySensor

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

UnregisterListener 不适用于 PROXIMITY_SCREEN_OFF_WAKE_LOCK 的相关文章

  • 合并两个位图图像(并排)

    任何人都可以帮助将两个位图图像合并为单个位图 在android中 并排 谢谢 尤瓦拉吉 您可以使用Canvas 查看这篇文章 http www jondev net articles Combining 2 Images in Androi
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • 启动 Twitter 应用程序 [重复]

    这个问题在这里已经有答案了 可能的重复 Twitter 应用程序的 Android Intent https stackoverflow com questions 2077008 android intent for twitter ap
  • android 谷歌+登录定制

    我正在创建一个 Android 应用程序 现在我正在实现社交网络登录 Facebook 按钮很好 但 google 按钮的语言与 Facebook 不同 另外 它只说 登录 我想让它说 用谷歌登录 我是 android 编程的新手 看到我需
  • 无法合并 Dex - Android Studio 3.0

    当我在稳定频道中将 Android Studio 更新到 3 0 并运行该项目时 我开始收到以下错误 Error Execution failed for task app transformDexArchiveWithExternalLi
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • OpenCV InRange 参数

    我在 Android 上使用 OpenCV 来实时查找特定颜色的圆圈 我的第一步是仅保留与我正在寻找的定义颜色相对应的像素 在本例中为红色或绿色 示例图像 https i stack imgur com CIozU jpg 为此 我正在使用
  • layout.xml 的用途是什么?

    人们为什么使用layout xml在他们的resources like
  • Flutter / FireStore:如何在 Flutter 中显示 Firestore 中的图像?

    我想将我在应用程序中使用的一些图像放入 Firestore 并从那里显示它们 而不是将它们作为资产捆绑在我的应用程序中 为了做到这一点 我想出了以下解决方案 对于我想要显示图像的项目 我创建了一个 Firebase 文档 其中有一个字段存储
  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 当应用程序未运行时如何堆叠 Firebase Cloud Messaging 通知?

    我在用Firebase Cloud Messaging将推送通知从我的服务器发送到我的 Android 应用程序 当应用程序运行时 通知是stacked因为我将它们设置为我的一个组FirebaseMessagingService 这很好 但
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • Android开发:未定义方法

    大家好 我是 Android 和 Eclipse 的新手 我刚刚遵循了developer android com 上的教程 现在我在添加操作栏 http developer android com training basics actio
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • Android应用程序kill事件捕获

    我想在我的应用程序被终止时执行一些操作 可以使用哪种方法来实现此目的 我正在开发 Android 5 0 这个问题的关键在于 您必须了解您的申请是否可以收到任何 当您的应用程序在任何情况下被终止时的额外回调 下面的答案是由德文连线 http
  • Amazon IAP 不会调用 onPurchaseResponse

    我有一个 Android 应用程序 它使用 IAP 我正在发送PurchasingManager initiateGetUserIdRequest 并得到用户识别成功 in onGetUserIdResponse 得到回复后Purchasi
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p
  • 绘制大位图时 nSyncAndDrawFrame 速度极慢

    我想用多个大位图优化视差滚动视图 在我的 Nexus 5 上 一切都很顺利 Traceview 转储如下所示 doFrame 方法大约需要 18 毫秒才能完成 但是 当使用我的 Nexus 7 或 Android 6 模拟器 Genymot

随机推荐

  • 如何更改comboBox.SelectedIndexChanged 事件中的comboBox.Text?

    代码示例 private void comboBox SelectedIndexChanged object sender EventArgs e if some condition comboBox Text new string 我的问
  • 查询 django 迁移表

    如何从视图中查询 django migrations 表 例如 我已经尝试过 当然不起作用 from django db import migrations latest migration migrations objects all o
  • 禁用单个 .NET Core API 操作的模型验证

    我有一个 API 控制器 用于在我正在开发的应用程序上执行自动保存 它使用与视图相同的视图模型 其中有许多必填字段 如果用户在保存表单时未填写表单 则自动保存控制器可能需要保存不被视为有效的模型 默认情况下 NET Core 控制器声明为
  • 以一定角度在 Canvas 中绘制图像,无需旋转 Canvas

    我正在使用 JavaScript 中的画布在 HTML 5 中绘制图像 我需要以旋转角度绘制它 我知道这可以通过使用画布上下文应用旋转 角度 函数来完成 但我需要这样做不旋转画布本身 如果可能的话 请建议可能的方法 实际上 您可以将想要旋转
  • Android - 围绕中心点旋转图像?

    当用户触摸并拖动位图 不是视图或画布 时 如何围绕其中心点旋转位图 我已经尝试了很多有关堆栈溢出的示例 但似乎都不起作用 到目前为止我有 double r Math atan2 posX dial getWidth 2 dial getHe
  • SQLAlchemy:如何根据其后端有条件地选择列的类型

    我想用HSTORE http docs sqlalchemy org en rel 0 8 dialects postgresql html sqlalchemy dialects postgresql HSTORE如果列使用 Postgr
  • Android 更新 ui 线程元素 - 最佳实践?

    我有一个应用程序可以显示一些测量值 例如温度 速度等 我想或多或少地坚持 MVC 模式 所以我得到了一些东西 可以在值出现时接收它们 从蓝牙组件 并将它们排序到特殊的值处理程序 这些应该计算东西等等 来自地理坐标的速度等等 并将值传递给视图
  • 使用 C# 获取以毫秒为单位的时间

    我正在编写一个程序 需要以毫秒为单位获取时间 我所说的时间 是指一个永远不等于自身的数字 并且总是比前一秒大 1000 个数字 我尝试过转换DateTime Now to a TimeSpan并得到TotalMilliseconds据此 但
  • Chart.js 中多个图表上的工具提示显示错误的值

    我正在使用最新的 Chart bundle js 在同一页面上创建多个堆叠条形图 例如 我有 3 个图表和 2 个数据集 图表是正确的 但每个图表上的工具提示始终相同并且显示错误的值 截图链接 https i stack imgur com
  • PHP 中的提醒系统

    我将在周末用 PHP 创建一个小型提醒系统 计划是 用户注册 用户使用简单的表单创建提醒和待办事项 输入提醒名称 描述和时间等详细信息 该信息存储在 MySQL 数据库中 脚本检查数据库中是否有应发送的提醒 并将它们发送到用户的电子邮件以及
  • 使用Oracle序列将日志id从jdbc插入到2个表中?

    我正在使用 oracle 序列将日志 id 插入到 tableA 中 如下所示 String SQL PREP INSERT INSERT INTO tableA LOG ID USER ID EXEC TIME VALUES logid
  • Powershell计划任务在启动时重复

    我正在尝试使用以下触发器创建计划任务 启动 每 5 分钟运行一次 无限期运行 在 GUI 中 我可以通过选择以下内容轻松完成此操作 开始任务 启动时在 高级 选项卡中 重复任务间隔 5 分钟 持续时间 无限期 但我在使用 Powershel
  • 不支持 IE9 border-radius 简写?

    我过去做过一些具有 border radius 属性的东西 如下所示 border radius 7px 这在 IE9 中不起作用 我以为IE9应该支持border radius 如果您需要示例 请参阅这个网站 http www accou
  • ArrayList迭代相同的数据

    我尝试以 MVC 模式创建一个 Web 应用程序来显示数据库中的数据 JSP
  • 如何用C语言实现十进制到十六进制的转换器

    所以我是 C 的绝对初学者 我必须制作一个十进制到十六进制的转换器 所以我想我需要创建一个循环 直到结果为 0 但我怎样才能让它记住所有剩余的内容呢 该数字将使用 scanf 输入 因此我无法为其定制代码 现在我想做这样的事情 while
  • 在 Cassandra 中更改集群名称

    我有一个集群 有 2 台机器 centos7 和 cassandra 3 4 192 168 0 175 和 192 168 0 174 种子是 192 168 0 175 我只是想更改集群名称 蛋糕应该是和平的 我在每个集群上做了 upd
  • 按类别和标签列出 WordPress 帖子

    我想在 WordPress 中生成所有类别名称为 X 且标签名称为 Y 的帖子 query posts cat X List tag Y 我上面的工作在一定程度上但并不完全 因为我需要重复这个列表并只是回显 the title 问题非常相似
  • 为什么 Worklight 应用程序需要 Worklight Server?

    我在 IBM Worklight for Android 上开发了一个应用程序 我必须使用 Web 服务 但我需要 worklight 服务器 我想知道为什么在工作灯上开发的应用程序需要工作灯服务器 难道我不能在没有worklight服务器
  • 我可以将react.js应用程序捆绑到多个模块中吗?

    假设我有一个带有多个选项卡的网站 使用react js构建 每个选项卡都包含大量数据 通常 webpack 将反应应用程序捆绑到一个捆绑包中 但如果您从不访问其中一个选项卡 这将浪费资源 是否可以将其分成单独的捆绑包 而无需重新捆绑 Rea
  • UnregisterListener 不适用于 PROXIMITY_SCREEN_OFF_WAKE_LOCK

    我有这个代码 public class MainActivity extends AppCompatActivity implements SensorEventListener private SensorManager mSensorM