安卓实验15
- 格式:doc
- 大小:139.50 KB
- 文档页数:5
实验15 传感器应用开发一、实验目的1、掌握使用SensorSimulator开发传感器应用。
2、了解常用的传感器的功能。
二、实验步骤1、加速度传感器的应用。
使用SensorSimulator工具,补充下列程序,实现如下效果。
安装SensorSimulator步骤如下:◆登录到FTP上,下载SensorSimulator压缩文件。
◆下载SensorSimulator工具后,下载完成后得到一个sensorsimulator-2.0-rc1.zip压缩包,解压该文件。
◆安装SensorSimulator的手机端程序。
通过命令窗口进入解压文件的bin目录下,输入如下命令来安装SensorSimulatorSettings-2.0-rc1.apk文件。
adb installSensorSimulatorSettings-2.0-rc1.apk◆运行SensorSimulator的PC端程序,通过命令窗口进入解压文件的bin目录下,并在窗口内执行如下命令:java –jar sensorsimulator-2.0-rc1.jar。
◆运行SensorSimulator的手机端程序,在SensorSimulator的手机端程序中填写SensorSimulator的PC端程序的监听IP地址、监听端口。
◆在应用项目上右键单击选择“Build Path” >> “Add External Archives…”,找到sensorsimulator-lib-2.0-rc1.jar所在位置,将其添加到项目中。
◆获取SensorManagerSimulator对象,使用该对象调用connectSimulator()方法连接模拟器。
◆应用程序需要访问网络的权限。
AccelSimulatorTest.java程序如下,请补充所缺代码:import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;import org.openintents.sensorsimulator.hardware.Sensor;import org.openintents.sensorsimulator.hardware.SensorEvent;import org.openintents.sensorsimulator.hardware.SensorEventListener;import android.app.Activity;import android.hardware.SensorManager;import android.os.Bundle;import android.widget.EditText;public class AccelSimulatorTest extends Activity implements SensorEventListener{ // 定义模拟器的Sensor管理器private SensorManagerSimulator mSensorManager;// 定义界面上的文本框组件EditText etTxt1;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);// 获取程序界面的文本框组件etTxt1 = (EditText) findViewById(R.id.txt1);// 获取传感器模拟器的传感器管理服务mSensorManager = ;// 连接传感器模拟器mSensorManager. ;}protected void onResume() {super.onResume();// 为系统的加速度传感器注册监听器mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_GAME);}protected void onStop() {// 取消注册mSensorManager.unregisterListener(this);super.onStop();}// 以下是实现SensorEventListener接口必须实现的方法// 当传感器的值发生改变时回调该方法public void(SensorEvent event) {float[] values = event.values;StringBuilder sb = new StringBuilder();sb.append("X方向上的加速度:");sb.append(values[0]);sb.append("\nY方向上的加速度:");sb.append(values[1]);sb.append("\nZ方向上的加速度:");sb.append(values[2]);etTxt1.setText(sb.toString());}// 当传感器精度改变时回调该方法。
public void onAccuracyChanged(Sensor sensor, int accuracy) {}}2、根据上一题目,编写代码,实现如下图所示结果。
3、利用方向传感器,调试并运行程序,实现如下结果。
Compass.java程序如下:import org.openintents.sensorsimulator.hardware.Sensor;import org.openintents.sensorsimulator.hardware.SensorEvent;import org.openintents.sensorsimulator.hardware.SensorEventListener;import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;import android.app.Activity;import android.hardware.SensorManager;import android.os.Bundle;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.ImageView;public class Compass extends Activity implements SensorEventListener{ // 定义显示指南针的图片ImageView znzImage;// 记录指南针图片转过的角度float currentDegree = 0f;// 定义模拟器的Sensor管理器private SensorManagerSimulator mSensorManager;// 定义真机的Sensor管理器// SensorManager mSensorManager;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);// 获取界面中显示指南针的图片znzImage = (ImageView) findViewById(R.id.znzImage);// 获取真机的传感器管理服务// mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);// 获取传感器模拟器的传感器管理服务mSensorManager = SensorManagerSimulator.getSystemService(this,SENSOR_SERVICE);// 连接传感器模拟器mSensorManager.connectSimulator();}@Overrideprotected void onResume() {super.onResume();// 为系统的方向传感器注册监听器mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onPause(){// 取消注册mSensorManager.unregisterListener(this);super.onPause();}@Overrideprotected void onStop(){// 取消注册mSensorManager.unregisterListener(this);super.onStop();}@Overridepublic void onSensorChanged(SensorEvent event) {// 真机上获取触发event的传感器类型//int sensorType = event.sensor.getType();// 模拟器上获取触发event的传感器类型int sensorType = event.type;switch (sensorType){case Sensor.TYPE_ORIENTATION:// 获取绕Z轴转过的角度。
float degree = event.values[0];// 创建旋转动画(反向转过degree度)RotateAnimation ra = new RotateAnimation(currentDegree,-degree, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);// 设置动画的持续时间ra.setDuration(200);// 运行动画znzImage.startAnimation(ra);currentDegree = -degree;break;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy){}}。