效果看完了,现在来看下具体的实现过程吧,吼吼,说难不难,说简单也不简单,使用的模拟器小工具小马因为过大,小马上传不上来,我会给出连接,需要的朋友可以自行访问下载下的,写下使用步骤(流水帐了....),看不懂使用步骤的可以在下载小工具的链接中找更为详细的使用方法哦,自己试着找下吧...
1.将下载的小工具libs包导入到我们工程中
2.再找到下载的小工具中Jar包,可直接点击运行,用来监听端口,实现模拟
3.再将小工具中的APK文件装到模拟器中,运行这个APK程序,设置下IP 端口
4.点击Conn...连接到小工具,端口要与模拟器配置的端口一致,否则无效
5.大体就是这样了,下面小马再贴下代码,不懂的朋友不用担心,看完就明白了
主控制代码:
package com.xiaoma.sensor.demo; import org.openintents.sensorsimulator.hardware.SensorManagerSimulator; import Android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.widget.TextView; /** * @Title: SensorDemoActivity.java * @Package com.xiaoma.sensor.demo * @Description: 传感器测试 * @author XiaoMa */ public class SensorDemoActivity extends Activity implements org.openintents.sensorsimulator.hardware.SensorEventListener { private TextView tView; private TextView tView2; private TextView tView3; // private SensorManager manager = null; private SensorManagerSimulator imulatorManager = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } /** * 初始化方法实现 */ private void init() { tView = (TextView) findViewById(R.id.textview); tView2 = (TextView) findViewById(R.id.textview2); tView3 = (TextView) findViewById(R.id.textview3); /** * 一般取传感器服务的方式只有一种,今天小马来说下借助Google提供的工具来实现 * 在模拟器上模拟真机的传感器测试,很爽的哦....不用真机也可以测效果,在此先 * 注释下,下面的方式一是用正常的方式取传感器服务,方式二是用工具来实现模拟真机 * 效果,但方式一无法在模拟器上测试,所以小马就注释掉,用方式二来进行讲解 */ //下面这行注释是取得系统级传感器服务 方式一: // manager= (SensorManager)getSystemService(SENSOR_SERVICE); //方式二:取得模拟器模拟的传感器服务 imulatorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE); //连接模拟传感器的工具 imulatorManager.connectSimulator(); /** * 此处是小马犯的错,就是在注释传感器监听的时候直接在初始化方法里面注释,但官方 * 的指示是在onResume方法里面注释,固此小马写在这个地方,供大家参考,下面注释 * 内容大家不要在这个地方注册,有关传感器的注册都在onResume方法里注册,吼吼, * 下面是方式一注册: */ // manager.registerListener(this, // manager.getDefaultSensor(Sensor.TYPE_ORIENTATION), // SensorManager.SENSOR_DELAY_GAME); // manager.registerListener(this, // manager.getDefaultSensor(Sensor.TYPE_GRAVITY), // SensorManager.SENSOR_DELAY_GAME); // Sensor sensor3 = // manager.getDefaultSensor(sensor.TYPE_ACCELEROMETER);//加速度 } //onCreate>>onStart>>onResume...简单的复习下生命周期 @Override protected void onResume() { /*方式一注册: * imulatorManager.registerListener(this, * imulatorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), * SensorManager.SENSOR_DELAY_GAME); * imulatorManager.registerListener(this, * imulatorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), * SensorManager.SENSOR_DELAY_GAME); * imulatorManager.registerListener(this, * imulatorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), * SensorManager.SENSOR_DELAY_GAME); */ //方式二注册 imulatorManager.registerListener(this, imulatorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); imulatorManager.registerListener(this, imulatorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE), SensorManager.SENSOR_DELAY_GAME); imulatorManager.registerListener(this, imulatorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); super.onResume(); } /** * 下面这个监听本来是用来监听传感器的,后来版本升级用SensorEventListener来代码下面这 * 段代码了,小马写在这个地方只为与新版对比下,很有特点,希望大家仔细观察下.... */ /* * private SensorListener listener = new SensorListener() { * * @Override public void onSensorChanged(int sensor, float[] values) { } * * @Override public void onAccuracyChanged(int sensor, int accuracy) { } }; */ /** * 因为当前类实现Google提供工具中的接口类,下面这两个方法必须实现 * 细心的朋友可以发现与上面的不同之处了吧 */ @Override public void onAccuracyChanged( org.openintents.sensorsimulator.hardware.Sensor arg0, int arg1) { } @Override public void onSensorChanged( org.openintents.sensorsimulator.hardware.SensorEvent event) { Log.i("XiaoMa", "调用onSensorChanged()方法了"); float x = event.values[SensorManager.DATA_X];// 或直接写:values[0] float y = event.values[SensorManager.DATA_Y];// 或直接写:values[1] float z = event.values[SensorManager.DATA_Z];// 或直接写:values[2] if (SensorManager.SENSOR_ORIENTATION == event.sensor.TYPE_ORIENTATION) { tView.setText("方向传感器:" + "\n" + "X:" + x + "\n" + "Y:" + y + "\n" + "Z:" + z + "\n"); } if (SensorManager.SENSOR_ACCELEROMETER == event.sensor.TYPE_ACCELEROMETER) { tView3.setText("加速传感器:" + "\n" + "X:" + x + "\n" + "Y:" + y + "\n" + "Z:" + z + "\n"); } /** * 本来这个地方要写的是重力传感器,但在这个插件下没有重力传感器,临时改成温度了,类同... * 工具当中没有不代表设备中没有,这篇文章目的是为了借助工具实现在模拟上模拟真机传感器测试 */ if (SensorManager.SENSOR_TEMPERATURE == event.sensor.TYPE_TEMPERATURE) { tView3.setText("温度传感器:" + "\n" + "X:" + x + "\n" + "Y:" + y + "\n" + "Z:" + z + "\n"); } } /* * 方式:下面也是同样的事件函数,写在这个地方也为与其它版本对比,省了翻来翻去 * @Override public void onSensorChanged(SensorEvent event) { * float x = event.values[SensorManager.DATA_X];//或直接写:values[0] * float y = event.values[SensorManager.DATA_Y];//或直接写:values[1] * float z = event.values[SensorManager.DATA_Z];//或直接写:values[2] * * switch (event.sensor.getType()) { case Sensor.TYPE_ORIENTATION: * tView.setText("方向传感器:"+"\n"+"X:"+x+"\n"+"Y:"+y+"\n"+"Z:"+z+"\n"); break; * case Sensor.TYPE_GRAVITY: * tView2.setText("重力传感器:"+"\n"+"X:"+x+"\n"+"Y:"+y+"\n"+"Z:"+z+"\n"); break; * case Sensor.TYPE_ACCELEROMETER: * tView3.setText("加速传感器:"+"\n"+"X:"+x+"\n"+"Y:"+y+"\n"+"Z:"+z+"\n"); * * default: break; } * * } */ /* * @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } */ /** * 朋友也注意下,最后这步也很重要,因为一个设备上可以有多个传感器,况且传感器很耗电量, * 所以用完之后一定养成好习惯,及时关闭传感器,留电量给用户用在其它地方 */ @Override protected void onStop() { // manager.unregisterListener(this); imulatorManager.unregisterListener(this); super.onStop(); } /** * 最后小马贴下传感器学习的很不错的Google网址,有兴趣的朋友可以自行浏览下 * * 或: * */ }