一、今日的任务安排:
1. 了解下什么是传感器,传感器的分类,传感器在手机中的应用有哪些等等;
2. 编写出来较为简单的距离传感器的demo并能实现基本的功能;
二、思路方法:
传感器编写的步骤:
1. 通过getSystemService获得SensorManager实例对象;
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2. 通过SensorManager实例对象获得想要的传感器对象:参数决定获取哪个传感器;
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
3. 在获得焦点时注册传感器并让本类实现SensorEventListener接口;
4. 必须重写的两个方法:onAccuracyChanged,onSensorChanged;
三、 代码编写
1. 首先在androidManifest文件中申请权限;
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
第一个权限加到xml文件中时会报错,但是我会很利索的去clean掉,实现步骤:找到eclipse中的菜单选项project --> clean,选择当前项目就ok。
2. 布局文件中只有xml文件即可;
3. java类文件的编写:
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;//电源锁
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对象
}
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){
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) {
//经过测试,当手贴近距离感应器的时候its[0]返回值为0.0,当手离开时返回1.0
tv .setText(its[0].toString[]);
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO 自动生成的方法存根
}
}
四、 功能说明:
做的是距离传感器,通过距离传感器来控制屏幕的亮灭,当距离为0是则屏幕暗,字符串显示为0;
当距离超过设定的阈值为1时则屏幕亮,字符串显示为1。
五、 遇到的困境
在屏幕灭掉的时候根本看不到距离感应的显示,这时将屏幕暗的级别改的相对低一些,使屏幕仍是白色的;