首先说一下
android平台下的
11种感应器:
1. ACCELEROMETER 加速,描述加速度的。
2.GRAVITY 重力,这个在大家都知道。
3.GYROSCOPE 陀螺仪,对于物体跌落检测更强大些,开发游戏少了它会有点遗憾的,
API Level 9新增的类型。
4. LIGHT 光线感应器,很多
Android手机的屏幕亮度是根据这个感应器的数组自动调节的。
5. LINEAR_ACCELERATION 线性加速器,
API Level 9新增的。
6. MAGNETIC_FIELD 磁极感应器。
7. ORIENTATION 方向感应器。
8. PRESSURE 压力感应器。
9. PROXIMITY 距离感应器,对于通话后关闭屏幕背光很有用。
10. ROTATION_VECTOR 旋转向量,
Android 2.3新增的,如果我们过去处理图像会发现这个还是很有用的,不过这里还是对游戏开发起到辅助。
11. TEMPERATURE 温度感应器,可以获取手机的内部温度,不过和周边的有些差距,毕竟手机内部一般温度比较高。
要善于应用这些资源,今天要说的就是距离感应器。其这个锁频的原理也很简单,就是当有物体靠近距离感应器的时候,会触发事件,然后在事件里面申请设备电源锁,让屏幕处于黑屏出台,然后当物体离开距离感应器,释放设备电源锁,就
ok了。下面看看代码
MainActivity.java 这个类很简单,就是启动一个Service。
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);
}
}
然后就是MyService.java 主要内容
public class MyService extends Service {
private SensorManager mManager;
private Sensor mSensor = null;
private SensorEventListener mListener = null;
private PowerManager localPowerManager = null;
private PowerManager.WakeLock localWakeLock = null;
@Override
public void onCreate() {
//获取系统服务POWER_SERVICE,返回一个PowerManager对象
localPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
localWakeLock = this.localPowerManager.newWakeLock(32, "MyPower");
//获取系统服务SENSOR_SERVICE,返回一个SensorManager对象
mManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//获取距离感应器对象
mSensor = mManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
//注册感应器事件
mListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float[] its = event.values;
if (its != null
&& event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
System.out.println("its[0]:" + its[0]);
//经过测试,当手贴近距离感应器的时候its[0]返回值为0.0,当手离开时返回1.0
if (its[0] == 0.0) {// 贴近手机
System.out.println("手放上去了...");
if (localWakeLock.isHeld()) {
return;
} else
localWakeLock.acquire();// 申请设备电源锁
} else {// 远离手机
System.out.println("手k+Rrj"[^(( (>Vb8(剽(AIQ%1}]-}1=
,(M
I9}%5}]-}1=
,(M
I9} I%!Q}]-}1=
,(U11}]-}1=
,((屔еzsr%AIQ%1}]-}1=
/R7Wk^fRkb2'R2'J*fv{+R屔еRjtrb"2'R2'J^/"o*(((屔е"gV#zsn/v/>rьrr/T(屔е輽-屽輽-屽(屔е"ǖ'6OGjr/>/*B36_CИ^(((((



