最近在学习通信和Android,打算将这两个知识联系在一起,和小组的人一起做一个小项目,利用Android手机上的传感器搜集数据,把手机充当一个带有重力感应的游戏手柄。在这个项目中用到了Android中的Sensor类,SensorManager类,SensorEvent类,SensorEventListener类。
在Android中,Sensor类的常量有:TYPE_ACCELEROMETER/TYPR_ALL TYPE_AMBIENT_TEMPERATURE/TYPE_GRAVITY/TYPE_GYROSCOPE/TYPE_LIGHT/ TYPE_LINEAR_ACCELERATION/TYPE_MAGNETIC_FIELD/TYPE_ORIENTATION/TYPE_PRESSURE/TYPE_PROXIMITY/TYPE_RELATIVE_HUMIDITY/TYPE_ROTATION_VECTOR/ TYPR_TEMPERATURE,但是在这个项目中,我们只用到了TYPE_ACCELERAMETER,加速度传感器。
通过SensorManager连接设备的传感器,通过以下语句进行实例化:
Context.getSystenmService(SENSOR_SERVICE)。
下面是测试传感器的简单的代码,其作用是读取加速度传感器的X,Y,Z轴上的加速度变化,并用Toast把变化呈现出来。
public class MainActivity extends Activity {private SensorManager manager;    private Sensor sensor;    private SensorEventListener listener;    private TextView text;    //waystate记录赛车行驶方向,默认值为向前    private String waystate="forward";    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置为全屏显示this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN );this.requestWindowFeature(Window.FEATURE_NO_TITLE);//保持屏幕常亮getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);setContentView(R.layout.activity_main);text=(TextView)findViewById(R.id.TextView01);//初始化屏幕显示字符串text.setText("摇摆手机,观察传感器数字变化\nx=0,y=0,z=0");//初始化加速度传感器manager=(SensorManager)this.getSystemService(SENSOR_SERVICE);sensor=manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//初始化加速度变化事件监听器listener =new SensorEventListener(){int x,y,z;//当sensor的有效值改变时,从SensorManager中接收通知。public void onSensorChanged(SensorEvent e) {//立体坐标系的加速度x=(int)e.values[SensorManager.DATA_X];y=(int)e.values[SensorManager.DATA_Y];z=(int)e.values[SensorManager.DATA_Z]; if(y<2.5&&y>-2.5){ if(waystate!="forward") { //运动操作:让赛车向哪个方向跑的动作,这里先由吐司提示代替~ Toast.makeText(MainActivity.this,"forward",1).show(); } waystate="forward"; } if(y>=2.5){ if(waystate!="right") { Toast.makeText(MainActivity.this,"right",1).show(); } waystate="right"; } if(y<=-2.5){ if(waystate!="left") { Toast.makeText(MainActivity.this,"left",1).show(); } waystate="left"; }text.setText("摇摆手机,观察传感器数字变化\nx="+x+",y="+y+",z="+z);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}};}//自定义方法,传感器停止工作,300毫秒后恢复private void makeSensorDalay(){//加速度传感器休眠300毫秒,方法是先注销监听器,再注册监听器manager.unregisterListener(listener);Handler handler=new Handler(){public void handleMessage(Message msg){            if(msg.what==1){//注册监听器manager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);}}};Message message=Message.obtain();message.what=1;/* * 傻瓜注释一:这里可以设置延时时间 * 延时时间是传感器休眠时间!! */handler.sendMessageDelayed(message,600);}public void onResume(){super.onResume();//注册监听器manager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);}public void onPause(){//注销监听器manager.unregisterListener(listener);super.onPause();}public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

更多相关文章

  1. ScrollView实现界面自动滚动
  2. [Android(安卓)Pro] Android--Sensor传感器
  3. Android(安卓)特色开发--Sensor development && Voice recognition
  4. [实战示例] 带您深入探讨 Android(安卓)传感器【附源码】
  5. Android方向传感器实践——自己动手做指南针
  6. 《Android应用开发揭秘》第九章Android特色开发一
  7. [实战示例] 带您深入探讨 Android(安卓)传感器【附源码】
  8. 2014年Android碎片化报
  9. android之【事件监听器】

随机推荐

  1. 2019-01-28 Android(安卓)自定义view
  2. Android的framework层是如何对铃声的音量
  3. Android中SecureRandom类的安全性浅析
  4. EventBus—订阅者索引
  5. Android之Date & Time组件
  6. Android(安卓)Studio使用教程(一)
  7. android LayoutInflater.inflate()的参数
  8. Android(安卓)EditText设置InputType属性
  9. opencv在android预览上实现人脸识别(4)
  10. android实现耳机插入和拔出状态检测