Android编程基于距离传感器控制手机屏幕熄灭的方法详解

作者:飘走的我 时间:2022-02-20 10:49:05 

本文实例讲述了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

标签:Android,距离传感器
0
投稿

猜你喜欢

  • SSM框架搭建图文教程(推荐)

    2023-11-10 20:39:07
  • C# 抓取网页内容的方法

    2022-09-13 04:50:10
  • Java中简单实用Quartz概述

    2021-09-09 14:16:30
  • 深入Android HandlerThread 使用及其源码完全解析

    2023-11-30 19:16:56
  • C# SkinEngine控件 给窗体添加皮肤的方法

    2021-10-21 23:32:08
  • C#利用异或算法实现加密解密

    2022-08-15 14:48:51
  • WPF实现带筛选功能的DataGrid

    2022-05-07 07:48:56
  • android耳机左右声道接反具体修正方法

    2021-05-27 21:16:38
  • Android性能优化之Bitmap图片优化详解

    2023-08-06 02:54:23
  • Java实现小型图书馆管理系统

    2021-06-14 04:27:35
  • Flutter基于Dart Unwrapping Multiple Optional小技巧

    2023-07-05 11:44:19
  • C# Color.FromArgb()及系统颜色对照表一览

    2021-05-24 08:21:02
  • C#动态webservice调用接口

    2023-10-18 07:22:00
  • Springmvc Controller接口代码示例

    2023-11-28 10:13:25
  • Android 简单实现倒计时功能

    2023-06-27 11:35:40
  • Java在Excel中创建透视表方法解析

    2021-11-03 05:49:45
  • 关于eclipse安装spring插件报错An error occurred while collecting items to be installed...解决方案

    2023-05-27 03:34:45
  • Android开发之ListView列表刷新和加载更多实现方法

    2021-06-20 06:28:30
  • Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

    2022-02-03 13:24:15
  • Android开发之SQLite的使用方法

    2022-11-12 05:26:38
  • asp之家 软件编程 m.aspxhome.com