权限                                                                                            

<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

第一个权限加到xml文件中时会报错,但是我会很利索的去clean掉,实现步骤:找到eclipse中的菜单选项project>clean,选择当前项目就ok。

代码                                                                                            

public class MainActivity extends Activity implements SensorEventListener {
public static final String TAG = "SensorTest";
//调用距离传感器,控制屏幕
private SensorManager mManager;//传感器管理对象
//屏幕开关
private PowerManager localPowerManager = null;//电源管理对象
private PowerManager.WakeLock localWakeLock = null;//电源锁
//TextView
private TextView tv;//基本上没啥用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); mManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//获取系统服务POWER_SERVICE,返回一个PowerManager对象
localPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
localWakeLock = this.localPowerManager.newWakeLock(32, "MyPower");//第一个参数为电源锁级别,第二个是日志tag
} public void onResume(){
super.onResume();
mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),// 距离感应器
SensorManager.SENSOR_DELAY_NORMAL);//注册传感器,第一个参数为距离监听器,第二个是传感器类型,第三个是延迟类型
} public void onStop(){
super.onStop();
Log.d(TAG,"on stop");
} public void onDestroy(){
super.onDestroy();
Log.d(TAG,"on destroy");
if(mManager != null){
localWakeLock.release();//释放电源锁,如果不释放finish这个acitivity后仍然会有自动锁屏的效果,不信可以试一试
mManager.unregisterListener(this);//注销传感器监听
}
} @Override
public void onSensorChanged(SensorEvent event) {
float[] its = event.values;
//Log.d(TAG,"its array:"+its+"sensor type :"+event.sensor.getType()+" proximity type:"+Sensor.TYPE_PROXIMITY);
if (its != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) { System.out.println("its[0]:" + its[0]);
tv.setText(its[0]+"");
//经过测试,当手贴近距离感应器的时候its[0]返回值为0.0,当手离开时返回1.0
if (its[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(); // 释放设备电源锁
}
}
} } @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO 自动生成的方法存根 } }

需要特别注意的是,在onDestroy()函数里需要把对象锁释放掉(localWakeLock.release()),否则这个功能会一直存在知道你清楚应用数据或者删除应用,我就为这个问题困扰了好久。为此我特意在源代码例子里做了一个跳转页面,加了log。

这里我们实例化了两个管理对象,一个是传感器管理对象:SensorManager;另一个是 电源管理对象:localPowerManager。

传感器管理对象负责收集收集与物体之间的距离数据,电源管理对象通过判断传感器收集到数据对屏幕的灭屏和白屏做处理。

我是天王盖地虎的分割线                                                                 

源代码:http://pan.baidu.com/s/1dD1Qx01

距离传感器.zip

参考:http://blog.csdn.net/luozhi3527/article/details/9999901

Android -- 距离感应器控制屏幕灭屏白屏的更多相关文章

  1. Android 启动APP时黑屏白屏的三个解决方案

    你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...

  2. Android 启动APP时黑屏白屏的三个解决方案(转载)

    你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...

  3. Android 启动APP时黑屏白屏的解决方案

    在开发中,我们在启动app的时候,屏幕会出现一段时间的白屏或者黑屏,不同设备时间长短不同.很影响用户体验. 首先分析一下,产生这个现象的原因,当我们在启动一个应用时,系统会去检查是否已经存在这样一个进 ...

  4. 关于React Native 安卓首屏白屏优化

    问题描述 在android中,当点击某个rn模块的入口按钮,弹出rn的activity到rn的页面展现出来的过程中,会有很明显的白屏现象,不同的机型不同(cpu好的白屏时间短),大概1s到2s的时间. ...

  5. 解决android 启动白屏问题

    Android 启动APP时黑屏白屏的三个解决方案 http://www.cnblogs.com/liqw/p/4263418.html android:windowSoftInputMode属性使用 ...

  6. MUI APP防止登陆页面出现白屏

    最近在用MUI开发APP,总体效果,在IOS上,是完美的,但是在低端的Android手机上,就会出现性能问题,我个人觉得最严重的是,就是首页,就是APP打开的第一个页面,在iOS上,由于性能高,所以, ...

  7. android开发 解决启动页空白或黑屏问题

    遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜 ...

  8. Android横竖屏切换和灭屏亮屏时Activity的生命周期探究(1)

    研究这个问题的初衷在于项目中碰到了一个问题:横屏的时候灭屏再亮屏,亮屏的时候用户能够清晰的看到先启动竖屏(过程1)再切换到横屏的过程,因为灭屏的时候onSaveInstanceState()保存的时横 ...

  9. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!

    android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...

随机推荐

  1. 1.异步消息Jms及其JmsTemplate的源代码分析,消息代理ActiveMQ

    一. 介绍 借助Spring,有多种异步消息的可选方案,本章使用Jms.Jms的消息模型有两种,点对点消息模型(队列实现)和发布-订阅消息模型(主题). 图1.点对点消息模型(一对一) 图2.发布-订 ...

  2. Ubuntu 14.04 – How to install xrdp in Ubuntu 14.04

    http://c-nergy.be/blog/?p=5305 Hello World, Ubuntu 14.04 has been released on April 17th 2014 and we ...

  3. Jquery 利用单个复选款(checkbox)实现全选、反选

    1 <script type="text/javascript"> $(function(){ //全选 $("#CheckedAll").clic ...

  4. POJ C++程序设计 编程题#1 编程作业—继承与派生

    编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 写一个MyStr ...

  5. 掌握iOS自动布局

    1,自动布局是一种基于约束的布局(constraint-based layout)引擎,它可以根据开发者在对象上的约束自动调整大小与位置. 2.在iOS 6之前使用的布局模型是“spring& ...

  6. 显示和隐藏Mac隐藏文件的终端命令

    打开终端,输入以下命令: 显示mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏mac隐藏文件的命令 ...

  7. C#中string[ ] args是什么意思,又有什么用呢

    转载:http://blog.sina.com.cn/s/blog_8b7263d1010172jv.html C#控制台程序中static void Main(string[ ] args) str ...

  8. Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http: ...

  9. 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6

    一款jQuery实现重力弹动模拟效果特效 鼠标经过两块黑色div中间的红色线时,下方的黑快会突然掉落, 并在掉落地上那一刻出现了弹跳的jquery特效效果,非常不错,还兼容所有的浏览器, 适用浏览器: ...

  10. Cache-control使用:header('Cache-control:private')

    发布:thebaby   来源:net     [大 中 小] 转自:http://www.jbxue.com/article/5624.html网页缓存由 HTTP消息头中的“Cache-contr ...