打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 学习笔记(九):重力感应器

Android中,所有传感器都要通过SensorMannager来访问,


然后调用getSystemService(SENSOR_SERVICE)方法得到手机的传感器管理对象,


onSensorChanged(SensorEvent se)在传感器值更改时调用,


使用传感器必须调用registerListener(SensorEventListener listener, Sensor sensor, int rate)方法注册,


感应器有3个方向float类型的值,x,y,z,取值范围在-10到10之间,




手机屏幕向上(z轴朝天)水平放置的时侯,x=0,y=0,z=10




手机屏幕向下(z轴朝地)水平放置的时侯,x=0,y=0,z=-10




手机屏幕向左(x轴朝天)的时候,x=10,y=0,z=0




手机竖直(y轴朝天)向上的时候,x=0,y=10,z=0




代码:

PS:在XML文件中有个TextView,用来显示重力感应器的值,




[java] public class TestActivity extends Activity { 

    TextView textView; 

    float x,y,z; 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        textView=(TextView) findViewById(R.id.textView); 

        //获得重力感应硬件控制器  

        SensorManager sm=(SensorManager) this.getSystemService(SENSOR_SERVICE); 

        Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

        //添加重力感应侦听,并实现其方法,  

        SensorEventListener sel=new SensorEventListener(){ 

            public void onSensorChanged(SensorEvent se) { 

                x=se.values[SensorManager.DATA_X]; 

                y=se.values[SensorManager.DATA_Y]; 

                z=se.values[SensorManager.DATA_Z]; 

                textView.setText("x="+(int)x+"y="+(int)y+"z="+(int)z); 

            } 

            public void onAccuracyChanged(Sensor arg0, int arg1) { 

            } 

        }; 

        //注册Listener,SENSOR_DELAY_GAME为检测的精确度,  

        sm.registerListener(sel, sensor,SensorManager.SENSOR_DELAY_GAME); 

    } 

public class TestActivity extends Activity {

 TextView textView;

 float x,y,z;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        textView=(TextView) findViewById(R.id.textView);

        //获得重力感应硬件控制器

        SensorManager sm=(SensorManager) this.getSystemService(SENSOR_SERVICE);

        Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        //添加重力感应侦听,并实现其方法,

        SensorEventListener sel=new SensorEventListener(){

   public void onSensorChanged(SensorEvent se) {

    x=se.values[SensorManager.DATA_X];

    y=se.values[SensorManager.DATA_Y];

    z=se.values[SensorManager.DATA_Z];

    textView.setText("x="+(int)x+"y="+(int)y+"z="+(int)z);

   }

   public void onAccuracyChanged(Sensor arg0, int arg1) {

   }

        };

        //注册Listener,SENSOR_DELAY_GAME为检测的精确度,

        sm.registerListener(sel, sensor,SensorManager.SENSOR_DELAY_GAME);

    }

当然,也可以用SensorEventListener接口来实现,


感应器在模拟器中是不能测试的,下面是真机测试效果,






本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【Based Android】Android Sensor感应器介绍
Android之使用传感器获取相应数据
gsensor即时数据的apk && 用gsensor来判断手机的静和动 && 手机摇一摇 &&气压计的测试应用
Android重力感应Demo(转)
Android重力感应器Sensor编程
如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服