原文地址;

如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET
http://blog.csdn.net/pku_android/article/details/7596864

 

(OpenIntents开源项目SensorSimulator)

1.      OpenIntents项目和可用资源介绍

[1].    项目介绍:OpenIntents项目的目的是提供一些开源的意图和接口,通过一些可以重用的组件让移动应用程序更加紧密的在一起工作。而且对于这些开源的项目,OpenIntents组织都会提供相应的源代码和示例程序展示项目如何使用。

[2].    项目资源:免费开放源代码下载地址在 www.openintents.org;
讨论区:在这里和开发人员一起讨论bug和新特征
翻译:帮助OpenIntents组织把开源项目翻译成不同语言新特征: 在这里你可以浏览新特征请求哟列表

[3].    可重用组件
在你的应用中可以通过Intent重用下列组件:
OI About: 显示作者的概要信息
OI File Manager: 提供“打开”和“另存为对话框” 
OI Safe:加密
OI Update: 更新

[4].    开发人员工具
Sensorsimulator:模拟传感器输入(各种传感器,温度,湿度,光照,以及电磁电量和GPS)
Androidxml2po:使用这个工具能够让志愿者将你的程序翻译成各种不同的语言

2.      Sensor Simulator使用介绍

下载,安装,配置
地址 Downloadit
运行SensorSimulator(bin/sensorsimulator-x.x.x.jar)程序
在Android模拟器上安装bin/SensorSimulatorSettings-x.x.x.apk (adbinstall apk_path)

运行SensorSimulatorSettings,输入IP Address 和socket port number,如下图所示:

[2].    至此,配置已经完成

测试配置
在Sensor Emulator的Sensors选项卡中,激活你想要使用的传感器,如下图

在Android模拟器中选择Sensor Emulator Settings里的Testing选项卡,单击Connect按钮,那么Android模拟器中相关传感器数据机会显示如下图所示,表示你已经连接成功,这时你还可以使用Sensor Emulator中的手机移动来观测Android模拟器和Sensor Emulator中的数据变化:

[3].    注意事项:如果要激活其它的传感器,那么必须要断开连接之后从新链接,才能够显示对应的数据

SensorEmulator使用介绍
Quick Settings
选项卡,支持快速设置传感器的数值

Telnet Emulator菜单
通过Telnet模拟器选项卡,向Android模拟器发送gps信息和电池电量信息0.5O� s-hNmH�n-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA'>

Additional Settings选项卡:完成Sensor Emulator端口号以及数据发送频率等的设置 -fonW� mlhNm8�n;mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA;mso-no-proof:yes'>模拟器选项卡,向Android模拟器发送gps信息和电池电量信息

Senario Simulator:对设备所经历的状态进行记录和模拟
要对设备状态进行记录和模拟,首先在Android 设备上安装SensorRecordFromDevice.apk(bin/SensorRecordFromDevice.apk)

按照提示操作,然后点击记录,那么我们就可以在Senario Emulator中看到设备的各个状态,以及各个状态对应的传感器参数值。
-hq
� -hhNm8�nminor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA;mso-no-proof:yes'>Android 设备上安装SensorRecordFromDevice.apk(bin/SensorRecordFromDevice.apk)

[1].    使用介绍
不使用传感器模拟器类库时传感器使用的代码示例:

package ss.pku.edu.cn;

import java.util.List;

import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

import android.app.Activity;

import android.content.Context;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.widget.TextView;

public class SensorDemoActivity extends Activity implementsSensorEventListener

//SensorManagerSimulator使用

/*org.openintents.sensorsimulator.hardware.SensorEventListener*/ {

    /** Called when the activity is firstcreated. */

private SensorManager sensor_manager_original;

    //SensorManagerSimulator的使用

/*  private SensorManagerSimulator sensor_manager_present;*/

private boolean is_available;

private TextView text_view;

    @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

sensor_manager_original = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

       //SensorManagerSimulator的使用

       /*sensor_manager_present= SensorManagerSimulator.getSystemService(this,

              SENSOR_SERVICE);

       sensor_manager_present.connectSimulator();*/

       text_view = (TextView) findViewById(R.id.tv);

       is_available = false;

    }

    @Override

protected void onResume() {

super.onResume();

       Sensor sensor=sensor_manager_original.getDefaultSensor(Sensor.TYPE_ORIENTATION);

       sensor_manager_original.registerListener(this, sensor,SensorManager.SENSOR_DELAY_FASTEST);

       //SensorManagerSimulator的使用

       /*org.openintents.sensorsimulator.hardware.Sensorsensor = sensor_manager_present

              .getDefaultSensor(Sensor.TYPE_ORIENTATION);

       sensor_manager_present.registerListener(this, sensor,

              SensorManagerSimulator.SENSOR_DELAY_FASTEST);*/

    }

    @Override

protected void onStop() {

       // TODO Auto-generatedmethod stub

super.onStop();

       sensor_manager_original.unregisterListener(this);

       ////SensorManagerSimulator的使用

       /*sensor_manager_present.unregisterListener(this);*/

    }

    //SensorManagerSimulator使用

    /*public void onAccuracyChanged(

           org.openintents.sensorsimulator.hardware.Sensor arg0, intarg1) {

       // TODO Auto-generated method stub

    }

    public void onSensorChanged(

           org.openintents.sensorsimulator.hardware.SensorEvent arg0){

       // TODO Auto-generated method stub

       if (arg0.type == Sensor.TYPE_ORIENTATION) {

           // 这里我们可以得到数据,并在文本中显示出来

           float[] values=arg0.values;

           text_view.setText("x:" + values[0] +"y:"

                  + values[1] + "z:" + values[2]);

       }

    }*/

public void onAccuracyChanged(Sensor sensor, int accuracy) {

       // TODO Auto-generatedmethod stub

    }

public void onSensorChanged(SensorEvent event) {

       // TODO Auto-generatedmethod stub

if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){

           text_view.setText("x:" + event.values[0] + "y:"

                  + event.values[1] + "z:" + event.values[2]);

       }

    }

}
在上面代码的基础之上,使用传感器模拟器类库的步骤为
a.在构建路径中加入lib/sensorsimulator-lib-x.x.x.jar
b.sensor_manager_original = (SensorManager)getSystemService(Context.SENSOR_SERVICE);用

sensor_manager_present =SensorManagerSimulator.getSystemService(this,

              SENSOR_SERVICE);sensor_manager_present.connectSimulator();代替
c.一般在onResume()方法中为传感器注册监听器,在onStop()方法中取消注册
d.
实现SensorEventListener接口,重写onAccuracyChanged(Sensor sensor,in accuracy)和onSensorChanged(SensorEvent event)方法即可
注意点:大家可能会担心,我如果为了测试在代码中使用OpenIntents组织的SensorSimulator项目,那么到发布的时候还要大量修改源代码,这一点在OpenIntents组织设计SensorSimulator项目的时候就已经想到了,如果你连接的设备并不是传感器模拟器,那么SensorManagerSimulator实际上是调用SensorManager完成获取传感器数据的功能,所以这个时候不需要修改代码,依然获取的是设备上传感器的数据。

传感器的数据定义
有关传感器的数据定义,能够在Google Devleloper网站上关于 AndroidSensorEvent reference的介绍中找到,在具体使用某一种传感器的时候,你可以参照这上面的资料了解某种传感器的数据是什么含义。

如何在Android应用程序中使用传感器模拟器SensorSimulator的更多相关文章

  1. 如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)

    原文地址http://blog.sina.com.cn/s/blog_621c16b101013ygl.html OpenIntents项目和可用资源介绍 [1].    项目介绍:OpenInten ...

  2. (Android UI)Android应用程序中资源:图片、字符串、颜色、布局等

    Android系统设计采用代码和布局分离的设计模式,因此在设计Android应用程序时需要遵循该设计模式. “把非代码资源(如图片和字符串常量)和代码分离开来始终是一种很好的做法.”---<An ...

  3. 转:如何在32位程序中突破地址空间4G的限制

    //如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...

  4. Android应用程序中Activity的生命周期

    Android应用程序中Activity的生命周期 对于Android来说Activity的生命周期是非常的重要,尤其是对于新学者来说,只有充分了解了Activity的生命周期,才能写出优良用户体验的 ...

  5. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  6. Android 在一个程序中启动另一个程序

    Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字 ...

  7. Android在程序中浏览网页

    本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 有时须要在程序中浏览一些网页.当然了能够通过调用系统的浏览器来打开浏览.可是大多 ...

  8. [zz]如何在C语言程序中处理汉字

    学习过C语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作.目前许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在print ...

  9. Android 在程序中动态添加 View 布局或控件

    有时我们需要在程序中动态添加布局或控件等,下面用程序来展示一下相应的方法: 1.addView 添加View到布局容器 2.removeView 在布局容器中删掉已有的View 3.LayoutPar ...

随机推荐

  1. Microsoft .NET Framework 3.5 for Windowns Server2012R2 GUI

    图形化安装,需要安装盘,不需要网络连接

  2. java递归方法

    一个方法体内调用他自身,称为方法递归. 方法递归是一种隐式的循环,Tahiti重复执行某段代码,但这种重复执行无需循环控制 /* Author:oliver QIN DATE:2015-12-19 D ...

  3. Andorid手机振动器(Vibrator)的使用

    标签: android vibrator 震动器 it 分类: Andorid 获取振动器Vibrator实例: Vibrator  mVibrator = (Vibrator) context.ge ...

  4. snmptrap使用

    SNMP简单网络管理协议,其中其支持的一个命令snmptrap命令,用于模拟向管理机发送trap消息.   启动陷阱方法: snmptrapd -C -c /etc/snmp/snmptrapd.co ...

  5. 【h5-egret】深入浅出对象池

    最近看到对象池这一块的东西,是频繁创建和删除类型游戏优化性能的一个解决方案. 简单来讲对象池就是个数组,把不用的对象放进去,因为数组还保存了对象的引用,所以对象不会被回收,等需要用的时候再从数组中取出 ...

  6. shell find and rm

    按时间删除命令: 删除当前目录下30天以前的所有文件: find . -type f -ctime + -exec rm -fr {} \; 删除当前目录下30天以前的所有目录: find . -ty ...

  7. Problem 1007 幸运数 线段树成段更新

    题目链接: 题目 Problem 1007 幸运数 Time Limit: 2000 mSec Memory Limit : 131072 KB 问题描述 皮特的幸运数是2和5.只由幸运数字2和5组成 ...

  8. HDU 4162 Shape Number

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4162 题意: 求给定字符的一阶差分链的最小表示. 题解: 先求一阶差分链,再求一阶差分链的最小表示法 ...

  9. Jquery.linq 使用示例

    http://linqjs.codeplex.com/ /*Linq JS*/ //range var aa = Enumerable.range(1, 10).toArray(); var kk = ...

  10. 【BZOJ】【1103】【POI2007】大都市meg

    dfs序 模板题,进点+1出点-1,刚好对于不在路径上的点一进一出刚好抵消,由于本题要动态修改(变成公路以后+1-1都变成0)所以在序列上套一个树状数组即可. TLE:1.递归dfs给爆了……写了个手 ...