Android -- 距离感应器控制屏幕灭屏白屏
权限
<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 -- 距离感应器控制屏幕灭屏白屏的更多相关文章
- Android 启动APP时黑屏白屏的三个解决方案
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...
- Android 启动APP时黑屏白屏的三个解决方案(转载)
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...
- Android 启动APP时黑屏白屏的解决方案
在开发中,我们在启动app的时候,屏幕会出现一段时间的白屏或者黑屏,不同设备时间长短不同.很影响用户体验. 首先分析一下,产生这个现象的原因,当我们在启动一个应用时,系统会去检查是否已经存在这样一个进 ...
- 关于React Native 安卓首屏白屏优化
问题描述 在android中,当点击某个rn模块的入口按钮,弹出rn的activity到rn的页面展现出来的过程中,会有很明显的白屏现象,不同的机型不同(cpu好的白屏时间短),大概1s到2s的时间. ...
- 解决android 启动白屏问题
Android 启动APP时黑屏白屏的三个解决方案 http://www.cnblogs.com/liqw/p/4263418.html android:windowSoftInputMode属性使用 ...
- MUI APP防止登陆页面出现白屏
最近在用MUI开发APP,总体效果,在IOS上,是完美的,但是在低端的Android手机上,就会出现性能问题,我个人觉得最严重的是,就是首页,就是APP打开的第一个页面,在iOS上,由于性能高,所以, ...
- android开发 解决启动页空白或黑屏问题
遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜 ...
- Android横竖屏切换和灭屏亮屏时Activity的生命周期探究(1)
研究这个问题的初衷在于项目中碰到了一个问题:横屏的时候灭屏再亮屏,亮屏的时候用户能够清晰的看到先启动竖屏(过程1)再切换到横屏的过程,因为灭屏的时候onSaveInstanceState()保存的时横 ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
随机推荐
- hdu1150
[ Reprinted ]最小点覆盖=最大二分匹配数 url: http://zhidao.baidu.com/link?url=ZMzk27V8P99KQN63DpVsE2fd1YBIk7Jg83E ...
- 调试时屏蔽JavaScript库代码 –Chrome DevTools Blackbox功能介绍
代码难免会有Bug,每次我们在Chrome调试代码时,总是会进入各种各样的库代码(比如jQuery.Zepto),但实际上很多时候我们并不希望这样,要是能把这些库代码“拉黑”多好啊. 广大码农喜闻乐见 ...
- RedHat安装VMwareTools出现解压压缩包时无法打开文件的现象
出现这种情况的原因是因为解压命令没有加—C参数,使用的命令为:tat -xvzf VMware Tools: 正确的解压命令应该是: tar -xvzf VMware Tools -C /opt,加上 ...
- 实现在Android开发中的Splash Screen开场屏的效果
很多网友可能发现近期Tencent推出的手机QQ Android版包含了一个开场屏Splash Screen载入效果,通常游戏或大型软件打开时可能需要一个释放解析资源的过程,需要一个前台的动画播放和后 ...
- 利用Python抓取CSDN博客
这两天发现了一篇好文章,陈皓写的makefile的教程,具体地址在这里<跟我一起写makefile> 这篇文章一共分成了14个部分,我看东西又习惯在kindle上面看,感觉一篇一篇地复制成 ...
- 针对BootStrap中tabs控件的美化和完善
BootStrap中的tabs控件以其简单易用而很受广大开发者的欢迎.但是,它的样式比较单一,如何才能在其原有的基础上做出更加美观的效果呢,我一直在考虑这个问题.另外,Bootstrap中的tabs必 ...
- 如何在MySQL中获得更好的全文搜索结果
如何在MySQL中获得更好的全文搜索结果 很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录.在后台,这些程序使用在一个SELECT 查询中的LIKE语 ...
- Linux之uboot分析与移植20160601
说一下uboot分析与移植: 1.下载.建立source insight工程.编译.烧写.如果无运行分析原因 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2 ...
- AngularJs记录学习01
<!doctype html> <html ng-app="myapp"> <head> <meta http-equiv="C ...
- db2建立表空间
--缓冲池 CREATE BUFFERPOOL EMP_BUF_POOL IMMEDIATE ALL DBPARTITIONNUMS SIZE 250 NUMBLOCKPAGES 0 PAG ...