android 中如何检测用户存在?

2024-01-18

我知道在 Galaxy Samsung SIII 中可以在设置中配置一个选项,以避免用户在查看屏幕时屏幕关闭。我认为手机使用摄像头或某种存在传感器。

  1. 是否可以通过编程来完成?
  2. 即使可以,某些设备也无法做到这一点。我在这里想象一些可能性:使用相机、加速计,甚至用户活动:如果屏幕打开、触摸,我不知道。 android 有一个关于“用户存在”的特定库吗?在可用的情况下使用最好的传感器?

是的,有这样的事情。

您可以使用传感器管理器 http://developer.android.com/reference/android/hardware/SensorManager.html获取传感器事件。例如,光Sensor http://developer.android.com/reference/android/hardware/Sensor.html对你有用:

private SensorManager sensorManager;
private Sensor lightSensor;
private float lightAmount;

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
     lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

     SensorEventListener listener = new SensorEventListener() {
         @Override
         public void onSensorChanged(SensorEvent event) {
             // returns the current light amount
             lightAmount = event.data[0];
         }

     lightSensor.registerListener(listener);
}

但他当然无法独自完成所有工作。对光传感器进行编程,以查看屏幕何时变亮(如果确实如此)should意味着用户不再关注它。您可以使用加速度计(如您所说)来帮助您。我找到了一些代码并对其进行了修改,该类应该是这样的:

public class AccelerometerDetector {

    boolean isAvailable = false;
    boolean isEnabled = false;

    /**
     * Constructor.
     *
     * @param enable : True to enable the accelerometer
     * @throws UnsupportedOperationException
     *  - thrown if the Accelerometer is not available on the current device.
     */
    public AccelerometerDetector(boolean enable) 
            throws UnsupportedOperationException 
    {
            /* Check if the sensor is available */
            for (String accelerometer : Sensors.getSupportedSensors())
                    if (accelerometer.equals(Sensors.SENSOR_ACCELEROMETER))
                            isAvailable = true;

            if (!accelerometerAvailable)
                    throw new UnsupportedOperationException(
                                    "Accelerometer is not available.");

            if (enable)
                    setEnableAccelerometer(true);
    }

    /**
     * Set if the Accelerometer is enabled or not.
     *
     * @param enable
     * @throws UnsupportedOperationException
     */
    public void setEnableAccelerometer(boolean enable)
            throws UnsupportedOperationException 
    {
            if (!accelerometerAvailable)
                    throw new UnsupportedOperationException(
                                    "Accelerometer is not available.");

            /* If should be enabled and isn't already */
            if (enable && !this.isEnabled) {
                    Sensors.enableSensor(Sensors.SENSOR_ACCELEROMETER);
                    this.isEnabled = true;
            } else /* If should be disabled and isn't already */
            if (!enable && this.isEnabled) {
                    Sensors.disableSensor(Sensors.SENSOR_ACCELEROMETER);
                    this.isEnabled = false;
            }
    }

    /**
     * Read the values provided by the Accelerometer.
     *
     * @return Current Accelerometer-values.
     * @throws UnsupportedOperationException
     *             if the Accelerometer is not available on this device.
     * @throws IllegalStateException
     *             if the Accelerometer was disabled.
     */
    public float[] readAccelerometer() 
            throws UnsupportedOperationException, IllegalStateException 
    {
            if (!isAvailable)
                    throw new UnsupportedOperationException(
                                    "Accelerometer is not available.");

            if (!this.isEnabled)
                    throw new IllegalStateException(
                                    "Accelerometer was disabled.");
            /* Get number of sensor-values the sensor will return. Could be
             * variable, depending of the amount of axis (1D, 2D or 3D
             * accelerometer). */
            int sensorValues = Sensors
                            .getNumSensorValues(Sensors.SENSOR_ACCELEROMETER);
            float[] values = new float[sensorValues];

            /* Make the OS fill the array we passed. */
            Sensors.readSensor(Sensors.SENSOR_ACCELEROMETER, values);

            return values;
    }
}

还要在 Manifest.xml 中声明此功能:

<uses-feature android:name="android.hardware.sensor.light" />
<uses-feature android:name="android.hardware.sensor.accelerometer" />

您所说的“存在传感器”可能是光/接近传感器。但你不能使用接近传感器,因为它通常只有 5 厘米的范围。

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

android 中如何检测用户存在? 的相关文章

随机推荐

  • 模板方法模式中每个实现需要不同的参数?

    我有一个基抽象类 需要一个身份验证算法 我有两种实现方式 一种将散列密码并将其与存储的散列进行比较 另一种将使用 Windows Active Directory 但在实际执行哈希检查或 Windows 身份验证之前 我必须绝对实现额外的工
  • 阻止一个表单提交,然后提交另一个表单 - 这种方法可靠吗?

    在一个表单的提交事件处理程序中提交另一个表单并返回是否安全false阻止提交第一份表格 form1 submit function form2 submit return false 我正在使用这种方法 并且它有效 至少在 IE6 中 但是
  • 如何在不使用 WinjS 库的情况下在通用 Windows 应用程序中添加后退按钮事件?

    这是我的 main js function use strict No need of WinJS var activation Windows ApplicationModel Activation var roaming Windows
  • 如何查看android数据库(SQLite)中保存的数据?

    我可以从 eclipse 查看数据库 来自文件管理器 但我想查看整个详细信息 我的意思是我插入的数据 但我无法查看 我的 Android 完整安装已经完成F Drive 您可以使用模拟器的 DDMS 访问此文件夹 除非您有 root 设备
  • Json 字符串反序列化为对象数组列表

    请帮忙 反序列化时出现此错误 无法将 System String 类型的对象转换为类型 系统 集合 通用 列表 来自客户端的 JSON 字符串 id 18 0 2 0 and 您可以输入自由文本来代替 id 23 1 3 1 and 刷新按
  • 将文件解密为流并将流读入 p​​andas(hdf 或 stata)

    概述我正在尝试做的事情 我有需要读入 pandas 的文件的加密版本 由于多种原因 解密到流而不是文件要好得多 所以这是我下面的兴趣 尽管我也尝试解密到文件只是作为中间步骤 但这也不起作用 我可以让它适用于 csv 但不适用于 hdf 或
  • 断言 VS 运行时异常

    我正在编写 API 因此我的 API 将从外部模块中使用 这是我无法弄清楚使用断言或什么的方法之一java lang IllegalArgumentException Adds translation of information to u
  • jQuery - 检查元素是否进入视图,淡入那些可见的元素

    当我知道要指定哪个元素时 我找到了这个问题的答案 但我正在寻找一种方法来检查 滚动 是否具有特定类的任何元素已进入视图 并按它们的方式修改它们 例如 更改不透明度 仅更改那些可见的透明度 我知道代码可能看起来与此类似 但我无法使其工作 jQ
  • Perl 特殊变量“@_”在子例程中不起作用

    该脚本从下载的网页中提取 URL 我在使用这个脚本时遇到了一些问题 当我使用 my csv html line 然后打印出 html LineArray 它只是打印出来 1 s 当我更换 my csv html line with my c
  • 传递引用类型对象并更改值

    我正在尝试将引用类型对象传递到方法中并从那里更改它 当我更改它时 传递给方法的变量没有更改 这是示例 public interface IPerson string Name get public class Teacher IPerson
  • Android Studio“构建”选项卡没有指向文件和行的链接?

    如何启用它以便每个编译时错误都带有指向文件和行的链接 我的同事也是这样 在我的 IDE 上似乎有些东西被禁用了 我找不到什么和在哪里 帮助 None
  • PyCharm 中针对 Python 编译扩展的自动完成

    当使用编译扩展 例如 OpenCV Python 绑定 编写 Python 代码时 PyCharm 似乎不知道它们的可用性 导入标有灰色下划线 作为工具提示显示 未解析的引用 并且自动完成功能也不起作用 代码中已使用的函数名称除外 这不是由
  • 使用 TreeView 最小化 ViewState

    关于如何做到这一点有任何实用的提示 技巧吗 似乎没有很多关于如何做到这一点的信息 我正在将数据从数据库加载到 TreeView 中 最大节点数约为 100 我仍然对最小化 ViewState 感兴趣 我还将动态添加和删除节点 通过用户交互
  • MSQLSMS 中蓝色和粉色单词的含义

    Microsoft SQL Management Studio 突出显示了一些特殊单词 并用蓝色或粉红色将它们着色 我想知道哪个规则决定了要使用的颜色 例如 考虑以下两个语句 SELECT FROM myTable UPDATE myTab
  • 由于某种原因无法从 p 标签获取文本 - Selenium (Python)

    我正在尝试用 Selenium 抓取页面 示例 HTML 如下所示 来自查看页面源代码 div class col s12 m12 l4 xl4 therapist contact list p class col s6 m6 l6 xl6
  • 停止 jquery 循环插件

    我正在使用cycle jquery 插件 我有一些淡入淡出的图像 希望它在循环结束时停止在最后一张图像上 有谁知道一个好方法来做到这一点 谢谢
  • ASCII 到光栅的转换

    我正在使用以下代码打开单波段光栅图像 带有温度值 library raster nrows 764 ncols 1022 df1 lt read table AA092800 1 asc skip 11 header FALSE sep t
  • Flask 静态文件路由中的变量 [url_for('static', filename='')] [重复]

    这个问题在这里已经有答案了 我正在制作一个简单的音乐应用程序 我想允许用户上传他们的音频文件 并且我有一个页面 我计划在其中显示所有歌曲 我创建了一个模板 结构如下 for song in songs div class chart ite
  • 使用自定义日期初始化 NSDate

    我正在寻找类似的东西 NSDate date NSDate alloc initWithYear 1984 month 10 Day 8 有没有办法做这样的事情 Thanks 我为此任务编写了一个类别 NSDate 缺少很多有用的方法 in
  • android 中如何检测用户存在?

    我知道在 Galaxy Samsung SIII 中可以在设置中配置一个选项 以避免用户在查看屏幕时屏幕关闭 我认为手机使用摄像头或某种存在传感器 是否可以通过编程来完成 即使可以 某些设备也无法做到这一点 我在这里想象一些可能性 使用相机