Android编程基于距离传感器控制手机屏幕熄灭的方法详解
作者:飘走的我 发布时间:2022-02-20 10:49:05
标签:Android,距离传感器
本文实例讲述了Android编程基于距离传感器控制手机屏幕熄灭的方法。分享给大家供大家参考,具体如下:
在现实生活中,打电话的时候手机挨着自己的头,屏幕会熄灭,这是为了不让自己的头按到什么手机键~
这个功能可以使用距离传感器来实现
P-Sensor距离感应器,可以感应手机和人体距离。具体使用用途是在通话过程中打开P-Sensor,那么当手机屏幕贴近用户脸部时,就会自动感应出手机和人体距离是多少。当小于某一个值时,就会熄灭屏幕,不再接收用户触摸屏幕事件,从而有效的防止通话过程中误触摸事件的出现。
具体实现代码如下:
public class MainActivity extends Activity implements SensorEventListener{
public static final String TAG = "SensorTest";
private SensorManager sensorManager;
private TextView tv;
private PowerManager localPowerManager = null;// 电源管理对象
private WakeLock localWakeLock = null;// 电源锁
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
tv = (TextView) findViewById(R.id.tv);
localPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
localWakeLock = this.localPowerManager.newWakeLock(32, "hahaha");// 第一个参数为电源锁级别,第二个是日志tag
}
@Override
protected void onResume() {
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
SensorManager.SENSOR_DELAY_UI);
super.onResume();
}
@Override
protected void onPause() {
sensorManager.unregisterListener(this);
super.onPause();
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values = event.values;
switch (event.sensor.getType()) {
case Sensor.TYPE_PROXIMITY:
tv.setText(values[0] + "");
if (values[0] == 0.0) {// 贴近手机
System.out.println("hands up");
Log.d(TAG, "hands up in calling activity");
if (localWakeLock.isHeld()) {
return;
} else {
localWakeLock.acquire();// 申请设备电源锁
}
} else {// 远离手机
System.out.println("hands moved");
Log.d(TAG, "hands moved in calling activity");
if (localWakeLock.isHeld()) {
return;
} else {
localWakeLock.setReferenceCounted(false);
localWakeLock.release(); // 释放设备电源锁
}
break;
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}
仔细想想,是不是屏幕熄灭的时候需要手机自带的电源~
所以需要加上权限:
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
效果图我就不贴了,需要真机测试
另外,关于Android权限控制可点击此处查看详细描述
附:完整实例代码点击此处本站下载。
希望本文所述对大家Android程序设计有所帮助。
来源:http://blog.csdn.net/qq_33642117/article/details/52016285


猜你喜欢
- 记录一下工作流的在Springboot中的使用,,顺便写个demo,概念,什么东西的我就不解释了,如有问题欢迎各位大佬指导一下。1.创建sp
- 算法简介迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学迪家迪杰斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶
- 本文实例为大家分享了Java读取并下载网络文件的具体代码,供大家参考,具体内容如下import java.io.ByteArrayOutpu
- 本文实例讲述了java实现求两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下:这个是华为OJ上的一道题目。首先,如果我们用jav
- 在Android Studio 2.1 Preview 3之后,官方开始支持双向绑定了。可惜目前Google并没有在Data Binding
- Android的布局管理器本身就是个UI组件,所有的布局管理器都是ViewGroup的子类,而ViewGroup是View的子类,所以布局管
- 获取resources文件路径背景在SpringBoot项目中,需要获取resources文件的路径,网上找了好多文章都不行,后面还是结合官
- 本文实例为大家分享了Android实现朋友圈评论回复列表的具体代码,供大家参考,具体内容如下Android实现朋友圈评论回复列表Androi
- Java中方法重写与重载的区别重 写重 载子类方法对父类方法的覆盖同一个类中同名方法的重载(同一类包括从父类继承的方法)方法名相同且参数个数
- 在java的开发学习中,可能需要想了解class文件对应的代码内容是什么,如果我们使用IDE工具,可以通过IDE工具的各种反编译插件去进行反
- 1. 新建TestServlet类package com.yanek.test;import java.io.IOException;imp
- 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网
- 一、环境准备:(根据自己电脑配置来选择安装版本,我的电脑是64位,所以此处选择64位安装)JDK下载:JDK 1.8下载地址: http:/
- 前言通过Mybatis做7000+数据量的批量插入的时候报错了,error log如下: , ('G61010352', &
- 在工作中要求将图片上传至本地,如下代码将介绍如何将图片上传至本地准备工作:环境:eclipse4.5-x64,jdk1.7-x64,mave
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 本文实例为大家分享了Android实现房贷计算器的具体代码,供大家参考,具体内容如下fangdai(activity)package com
- 本文实例讲述了C#编程实现取整和取余的方法。分享给大家供大家参考,具体如下:"%"为取余号,不用多说。 "/&
- 预加载bean在springBoot启动过程中就完成创建加载在AbstractApplicationContext的refresh方法中//
- 介绍POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI可以操作的文档格式有excel,word,p