如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)
原文地址http://blog.sina.com.cn/s/blog_621c16b101013ygl.html
- OpenIntents项目和可用资源介绍
[1]. 项目介绍:OpenIntents项目的目的是提供一些开源的意图和接口,通过一些可以重用的组件让移动应用程序更加紧密的在一起工作。而且对于这些开源的项目,OpenIntents组织都会提供相应的源代码和示例程序展示项目如何使用。
[2]. 项目资源:免费开放源代码下载地址在 www.openintents.org;
讨论区: 在这里和开发人员一起讨论bug和新特征
翻译:帮助OpenIntents组织把开源项目翻译成不同语言新特征: 在这里你可以浏览新特征请求哟列表
[3]. 可重用组件
在你的应用中可以通过Intent重用下列组件:
OI About: 显示作者的概要信息
OI File Manager: 提供“打开”和“另存为对话框”
OI Safe:加密
OI Update: 更新
[4]. 开发人员工具
Sensor simulator:模拟传感器输入(各种传感器,温度,湿度,光照,以及电磁电量和GPS)
Androidxml2po:使用这个工具能够让志愿者将你的程序翻译成各种不同的语言
- Sensor Simulator使用介绍
[1]. 下载,安装,配置
地址 Download it
运行SensorSimulator(bin/sensorsimulator-x.x.x.jar)程序
在Android模拟器上安装bin/SensorSimulatorSettings-x.x.x.apk (adb install 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]. Sensor Emulator使用介绍
Quick Settings 选项卡,支持快速设置传感器的数值
Sensor Parameters选项卡,能够查看某个传感器的详细信息,并且进行高级设置,以及给出这个传感器的帮助信息
TTelnet Emulator菜单
通过Telnet模拟器选项卡,向Android模拟器发送gps信息和电池电量信息
Additional Settings选项卡:完成Sensor Emulator端口号以及数据发送频率等的设置 Senario Simulator:对设备所经历的状态进行记录和模拟
要对设备状态进行记录和模拟,首先在Android 设备上安装SensorRecordFromDevice.apk(bin/SensorRecordFromDevice.apk)
按照提示操作,然后点击记录,那么我们就可以在Senario Emulator中看到设备的各个状态,以及各个状态对应的传感器参数值。
[4]. 使用介绍
不使用传感器模拟器类库时传感器使用的代码示例:
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使用
{
private SensorManager sensor_manager_original;
//SensorManagerSimulator的使用
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的使用
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的使用
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
sensor_manager_original.unregisterListener(this);
////SensorManagerSimulator的使用
}
//SensorManagerSimulator使用
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method 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完成获取传感器数据的功能,所以这个时候不需要修改代码,依然获取的是设备上传感器的数据。
[5]. 传感器的数据定义
有关传感器的数据定义,能够在Google Devleloper网站上关于 Android SensorEvent reference的介绍中找到,在具体使用某一种传感器的时候,你可以参照这上面的资料了解某种传感器的数据是什么含义。
如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)的更多相关文章
- 如何在Android应用程序中使用传感器模拟器SensorSimulator
原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...
- (Android UI)Android应用程序中资源:图片、字符串、颜色、布局等
Android系统设计采用代码和布局分离的设计模式,因此在设计Android应用程序时需要遵循该设计模式. “把非代码资源(如图片和字符串常量)和代码分离开来始终是一种很好的做法.”---<An ...
- 转:如何在32位程序中突破地址空间4G的限制
//如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...
- Android应用程序中Activity的生命周期
Android应用程序中Activity的生命周期 对于Android来说Activity的生命周期是非常的重要,尤其是对于新学者来说,只有充分了解了Activity的生命周期,才能写出优良用户体验的 ...
- 在 Android 应用程序中使用 SQLite 数据库以及怎么用
part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...
- 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)
引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...
- Android 在一个程序中启动另一个程序
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字 ...
- Android在程序中浏览网页
本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 有时须要在程序中浏览一些网页.当然了能够通过调用系统的浏览器来打开浏览.可是大多 ...
- [zz]如何在C语言程序中处理汉字
学习过C语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作.目前许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在print ...
随机推荐
- 通过实验分析system_call中断处理过程
作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过以一个简单的m ...
- Canvas入门(2):图形渐变和图像形变换
来源:http://www.ido321.com/986.html 一.图形渐变(均在最新版Google中测试) 1.绘制线性渐变 1: // 获取canvas 的ID 2: var canvas = ...
- c++ 概念及学习/c++ concept&learning(一)
学习过计算机组成原理就会知道,处理器会从主存中取得指令,然后进行解释执行.而他们的交流方式是以二进制方式进行的,也就是他们只能识别1和0 :其实计算机是不知道1和0的,现在的实现方式是以高电压与低电压 ...
- 一起刷LeetCode2-Add Two Numbers
今天看不进去论文,也学不进去新技术,于是先把题刷了,一会补别的. -----------------------------------------------------我才不是分割线------- ...
- OpenJDK与JDK的区别及Ubuntu下的安装方法
OpenJDK与JDK的区别: OpenJDK是JDK的开放原始码版本,以GPL协议的形式放出.两者的授权协议的不同,且在采用GPL协议的OpenJDK中,SUNJDK的一部分源代码因为产权的问题无法 ...
- Unbutu网卡驱动安装(Intel内置网卡8086:15b8)
工作中需要在新的实验平台上安装unbuntu14.04操作系统,系统安装好之后发现无法连接网络,分析后是由于缺少网卡驱动的原因. 下面把分析问题的过程及安装网卡驱动步骤介绍如下: 查看PCI信息 su ...
- Things App Engine Doesn't Do...Yet
当人们第一次使用App Engine的时候,他们会问一些App Engine不会做的事情.其中的一些事情Google在不久的将来会实现的,还有一些违背了App Engine设计的本质,将不可能增加(到 ...
- 在Heroku上部署MEAN
说明:个人博客地址为edwardesire.com,欢迎前来品尝. Heroku是国外普遍使用大受好评的PaaS,支持Nodejs,基础服务(Nodejs+MongoDB)基本都是免费的.搭建MEAN ...
- Type datetime2 is not a defined system type - Entity Framework 摘自网络
"Type datetime2 is not a defined system type" Solution: 把edmx 改为 ProviderManifestToken=&qu ...
- Innodb刷脏页技术深度挖掘
DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...