Android模拟器小工具实现模拟传感器(详解)
最近学习了下传感器的操作,但很多书籍都直接讲怎么取值,没有讲清楚怎么分辨不同类型传感器XYZ坐标方向的问题,小马这篇文章主要来说下方向的分辨及小工具实现模拟真机传感器的访问,因为小马在方向感上很YUN....所以写这篇文章来理下自己的脑瓜..希望对大家有帮助:先贴下效果图,后面再细讲:一:小工具贴图,请详细看下改变方向时三个值的变化
二:手机中装入小工具APK贴图效果:
三:监听端口效果图:
四:设置手机连接小工具贴图:
五:模拟手机摆动
在此,小马讲下常用的传感器的XYZ轴,一定要搞清楚方向,不然晕....
1》:手机屏幕XY方向,因为手机屏幕没Z轴,随便哪只手拿着手机,那么左上角 为原点,X正方向向右,Y轴正方向向下....
2》:加速传感器方向,随便哪只手正常拿着手机时,右下角为原点,X轴沿屏幕 向右,Y轴沿屏幕向上,Z轴垂直屏幕向上....
3》:姿态传感器,上面动态图中的Yaw...Pitch...Roll三个轴就搞笑了,具体是 这样的:
3.1:Yaw轴,方向不变,一起是重力加速度g的反方向,也就是一起垂直向上
3.2:Pitch轴,并不是固定不变,随着Yaw的变化而变化,只有与Yaw轴成90度 角永远不变,无论手机怎么转,它是一起与Yaw垂直不变的哦....
3.3:Roll轴沿手机屏幕向上,无论手机怎样放置,Roll的方向都是沿屏幕向 上,可以说与手机绑定死了...
效果看完了,现在来看下具体的实现过程吧,吼吼,说难不难,说简单也不简单,使用的模拟器小工具小马因为过大,小马上传不上来,我会给出连接,需要的朋友可以自行访问下载下的,写下使用步骤(流水帐了....),看不懂使用步骤的可以在下载小工具的链接中找更为详细的使用方法哦,自己试着找下吧...
1.将下载的小工具libs包导入到我们工程中
2.再找到下载的小工具中Jar包,可直接点击运行,用来监听端口,实现模拟
3.再将小工具中的APK文件装到模拟器中,运行这个APK程序,设置下IP 端口
4.点击Conn...连接到小工具,端口要与模拟器配置的端口一致,否则无效
5.大体就是这样了,下面小马再贴下代码,不懂的朋友不用担心,看完就明白了
主控制代码:
1. package com.xiaoma.sensor.demo;
2.
3. import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
4.
5. import android.app.Activity;
6. import android.hardware.Sensor;
7. import android.hardware.SensorEvent;
8. import android.hardware.SensorEventListener;
9. import android.hardware.SensorListener;
10. import android.hardware.SensorManager;
11. import android.os.Bundle;
12. import android.util.Log;
13. import android.widget.TextView;
14.
15. /**
16. * @Title: SensorDemoActivity.java
17. * @Package com.xiaoma.sensor.demo
18. * @Description: 传感器测试
19. * @author XiaoMa
20. */
21. public class SensorDemoActivity extends Activity implements
22. org.openintents.sensorsimulator.hardware.SensorEventListener {
23.
24. private TextView tView;
25. private TextView tView2;
26. private TextView tView3;
27. // private SensorManager manager = null;
28. private SensorManagerSimulator imulatorManager = null;
29.
30. /** Called when the activity is first created. */
31. @Override
32. public void onCreate(Bundle savedInstanceState) {
33. super.onCreate(savedInstanceState);
34. setContentView(R.layout.main);
35. init();
36. }
37.
38. /**
39. * 初始化方法实现
40. */
41. private void init() {
42.
43. tView = (TextView) findViewById(R.id.textview);
44. tView2 = (TextView) findViewById(R.id.textview2);
45. tView3 = (TextView) findViewById(R.id.textview3);
46.
47. /**
48. * 一般取传感器服务的方式只有一种,今天小马来说下借助Google提供的工具来实现
49. * 在模拟器上模拟真机的传感器测试,很爽的哦....不用真机也可以测效果,在此先
50. * 注释下,下面的方式一是用正常的方式取传感器服务,方式二是用工具来实现模拟真机
51. * 效果,但方式一无法在模拟器上测试,所以小马就注释掉,用方式二来进行讲解
52. */
53.
54. //下面这行注释是取得系统级传感器服务 方式一:
55. // manager= (SensorManager)getSystemService(SENSOR_SERVICE);
56.
57. //方式二:取得模拟器模拟的传感器服务
58. imulatorManager = SensorManagerSimulator.getSystemService(this,
59. SENSOR_SERVICE);
60. //连接模拟传感器的工具
61. imulatorManager.connectSimulator();
62.
63. /**
64. * 此处是小马犯的错,就是在注释传感器监听的时候直接在初始化方法里面注释,但官方
65. * 的指示是在onResume方法里面注释,固此小马写在这个地方,供大家参考,下面注释
66. * 内容大家不要在这个地方注册,有关传感器的注册都在onResume方法里注册,吼吼,
67. * 下面是方式一注册:
68. */
69. // manager.registerListener(this,
70. // manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
71. // SensorManager.SENSOR_DELAY_GAME);
72. // manager.registerListener(this,
73. // manager.getDefaultSensor(Sensor.TYPE_GRAVITY),
74. // SensorManager.SENSOR_DELAY_GAME);
75. // Sensor sensor3 =
76. // manager.getDefaultSensor(sensor.TYPE_ACCELEROM
补充:移动开发 , Android ,