andorid系统使用硬件资源_传感器1

这一节简单介绍android 使用硬件资源中的传感器的一般流程

一、使用准备

1、接口

Android系统要使用硬件资源的传感器,要依赖于android.hardware.SensorEventListener接口,通过此接口可以监听传感器的各种事件。

SensorEventListener的接口代码为:

package android.hardware

public interface SensorEventListener

{

public void onSensorChanged(SensorEvent event);

public void onAccuracyChanged(Sensor sensor,int accuracy); 

}

2、相关定义

    2.1 X、Y、Z 定义

        X轴: 传感器在水平面,延水平方向,从左向右的直线方向 。

        Y轴: 传感器在水平面,垂直与水平X轴方向,从近端到远端的方向。

        Z轴: 传感器平放在桌面(与重力成90度),指向天空的方向。

     

二、使用方法:

1、导入相关依赖文件

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;


2、注册

SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

mSensorMagager.registerListener(this,mSensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION,SensorManager.SENSOR_DELAY_FASTEST);



3、使用(以方向及加速度传感器等为例)

@Override
public void onSensorChanged(SensorEvent event)
{

if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{

str = String.format("%03.04f",event.values[0]);
textView2.setText(str);
str = String.format("%03.04f",event.values[1]);
textView3.setText(str);
str = String.format("%3.4f",event.values[2]);
textView4.setText(str);

}

if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{

str = String.format("%3.4f",event.values[0]);
textView5.setText(str);
str = String.format("%3.4f",event.values[1]);
textView6.setText(str);
str = String.format("%3.4f",event.values[2]);
textView7.setText(str);

}

}

      说明:根据不同的传感器类型,会不同。

               方向传感器参数

                event.values[0]:绕着Z轴旋转的角度。0度(正北) 90度(正东) 180(正南) 270度(正西)

                event.values[1]:绕着X轴旋转的角度。水平0,range(-180 ~ + 180),后高前低为正,前高后低为负

                event.values[2]:绕着Y轴旋转的角度。水平为0,range(-90 ~ +90) 左边高右边低为负值 ,右边高左边低为正值

              加速度传感器

 

                event.values[0]:绕着Z轴旋转的角度。0度(正北) 90度(正东) 180(正南) 270度(正西)

                event.values[1]:绕着X轴旋转的角度。水平0,range(-180 ~ + 180),后高前低为正,前高后低为负

                event.values[2]:绕着Y轴旋转的角度。水平为0,range(-90 ~ +90) 左边高右边低为负值 ,右边高左边低为正值

                     

4、注销

               mSensorMagager.unregisterListener(this);


注意:

        1、上文件中有一个this,指向结构本身的指针。

             这样写法时要在入口加入加   implements SensorEventListener

             如:public class MainActivity extends Activity  implements SensorEventListener {}

               此种方法注册与注销时,使用this指针,

             SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

            mSensorMagager.registerListener(this,mSensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION,SensorManager.SENSOR_DELAY_FASTEST);

             @Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{


}


@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
switch(event.sensor.getType())
{
case  Sensor.TYPE_ORIENTATION:
break;
case Sensor.TYPE_ACCELEROMETER:
break;
}
if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{


if(event.values[2] > 8)
{
step_flag_p =  true;
step_flag_n = false;
//textView1.setText("up");
}
if(event.values[2] < -8)
{
step_flag_n = true;
step_flag_n = false;
//textView1.setText("down");
}
str = String.format("%03.04f",event.values[0]);
textView2.setText(str);
str = String.format("%03.04f",event.values[1]);
textView3.setText(str);
str = String.format("%3.4f",event.values[2]);
textView4.setText(str);
}
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
if(flag)
{
lastPoint = event.values[1];
flag = false;
}

if(Math.abs(event.values[1]-lastPoint) > 8)
{
lastPoint =event.values[1];
textView1.setText(String.valueOf(++count));
}
if(event.values[0]>lastX)
lastX = event.values[0];
if(event.values[1]>lastX)
lastY = event.values[0];
if(event.values[2]>lastX)
lastZ = event.values[0];
str = String.format("%3.4f",event.values[0]);
textView5.setText(str);
str = String.format("%3.4f",event.values[1]);
textView6.setText(str);
str = String.format("%3.4f",event.values[2]);
textView7.setText(str);
str = String.format("%3.4f",lastX);
accMaxX.setText(str);
str = String.format("%3.4f",lastY);
accMaxY.setText(str);
str = String.format("%3.4f",lastZ);
accMaxZ.setText(str);
}
}

                 如:

               且此函数要加上:@Override

如:

@Override
public void onSensorChanged(SensorEvent event)

{

       }

         2、另一种方法:

          在入口入不加任何东西,

          写法为:

            public void onSensorChanged(SensorEvent event) {}等在         private final SensorEventListener mSensorEventListener=new SensorEventListener()
 {}内部:

            如:

           private final SensorEventListener mSensorEventListener=new SensorEventListener()
{
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{


}


@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
switch(event.sensor.getType())
{
case  Sensor.TYPE_ORIENTATION:
break;
case Sensor.TYPE_ACCELEROMETER:
break;
}
if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{


if(event.values[2] > 8)
{
step_flag_p =  true;
step_flag_n = false;
//textView1.setText("up");
}
if(event.values[2] < -8)
{
step_flag_n = true;
step_flag_n = false;
//textView1.setText("down");
}
str = String.format("%03.04f",event.values[0]);
textView2.setText(str);
str = String.format("%03.04f",event.values[1]);
textView3.setText(str);
str = String.format("%3.4f",event.values[2]);
textView4.setText(str);
}
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
if(flag)
{
lastPoint = event.values[1];
flag = false;
}

if(Math.abs(event.values[1]-lastPoint) > 8)
{
lastPoint =event.values[1];
textView1.setText(String.valueOf(++count));
}
if(event.values[0]>lastX)
lastX = event.values[0];
if(event.values[1]>lastX)
lastY = event.values[0];
if(event.values[2]>lastX)
lastZ = event.values[0];
str = String.format("%3.4f",event.values[0]);
textView5.setText(str);
str = String.format("%3.4f",event.values[1]);
textView6.setText(str);
str = String.format("%3.4f",event.values[2]);
textView7.setText(str);
str = String.format("%3.4f",lastX);
accMaxX.setText(str);
str = String.format("%3.4f",lastY);
accMaxY.setText(str);
str = String.format("%3.4f",lastZ);
accMaxZ.setText(str);
}
}

};

    注册与注销时,使用 mSensorEventListener

    如:

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager .registerListener(mSensorEventListener, mSensorManager 
.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager .registerListener(mSensorEventListener, mSensorManager 
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);


              mSensorMagager.unregisterListener(mSensorEventListener);

     

        

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值