Android 传感器应用举例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 案例功能
下文将结合计步器应用程序的开发来详细介绍如何在 Android 平 台 下 开 发 基 于 传 感 器 的 应 用 程 序 , 首 先 对 计 步 器 应 用 的功能和界面进行简单的介绍。
2.1 程序界面
程序运行界面如图 1 所示, 其中主窗体包括两个部分, 上半部分用于显示最近 7 天每天走过的步数, 以及今日走过的 步 数 , 通 过 一 个 自 定 义 的 View 来 实 现 ; 下 半 部 分 用 于 摆 放 3 个程序控制按钮。
Button btnDeleteData;
// 删 除 数 据 按 钮
StepUpdateReceiver receiver;
//定义一个继承自 BroadcastReceiver 的内部类
StepUpdateReceiver 来接受传感器的信息
public class StepUpdateReceiver extends BroadcastRe-
btnStopService =
(Button)findViewById(R.id.btnStop);
btnStopService.setOnClickListener(this);
btnDeleteData =
(Button)findViewById(R.id.btnDeleteData);
btnDeleteData.setOnClickListener(this);
setContentView(R.layout.main);// 设 置 当 前 屏 幕
wv = (WalkingView)
findViewById(R.id.walkingView);
btnToBackstage = (Button)
findViewById(R.id.btnDispose);
btnToBackstage.setOnClickListener(this);
文件的内容显示界面并与用户进行交互, 代码如下:
package wyf.wpf; import java.util.ArrayList; import android.app.Activity; … //省 略 部 分 引 入 相 关 类 的 代 码
//声 明 所 在 包 // 引 入 相 关 类
网络与通信
public class MySQLiteHelper extends SQLiteOpenHelper{
public static final String TABLE_NAME = "step_table";
public static final String ID = "id";
public static final String STEP = "step";
import android.view.View.OnClickListener;
import android.widget.Button;
public class WalkingActivity extends Activity implements
OnClickListener{
WalkingView wv; //WalkingView 对象引用
//注册 Receiver
receiver = new StepUpdateReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("wyf.wpf.WalkingActivity");
registerReceiver(receiver, filter);
//启动注册了传感器监听的 Service
Intent i = new Intent(this,WalkingService.class);
startService(i);
mh=new MySQLiteHelper(this,DB_NAME,null,1);
requireData(); //向 Service 请求今日走过步数
1 Android 及传感器
Android 是 以 Google 为 首 的 开 放 手 机 联 盟 (Open Handset Alliance— ——OHA) 于 2007 年 推 出 的 基 于 Linux 平 台 开 源 手 机 操 作 系 统 的 名 称 , 目 前 最 新 版 本 为 Android 2.1。 Android 旨 在 打造一个真正的标准化、 开放化的嵌入式手机软件平台。
}
//重写 onDestroy 方法
protected void onDestroy() {
unregisterReceiver(receiver); //注销 Receiver
2010. 23 41
super.onDestroy(); } //重写 OnClickListener 接口的 onClick 方法 public void onClick(View view) {} //方法:向 Service 请求今日走过的步数 public void requireData(){} } 上 述 代 码 为 Walking Activity 类 的 代 码 框 架 , 由 于
Android 平台下传感器技术开发计步器应用
苏亚光 吴亚峰 索依娜
摘 要: 结合实际案例, 介绍了在程序中注册传感器监听器对手机的加速度变化进行感应的方法, 以及使用 Intent 在 Activity 与 Service 之间进行通信, 以及对 Android 平台下的嵌入式数据库 SQLite 进行操作的技巧。 关键词: Android; SQLite; Notification; 传感器; 计步器
}
public void onCreate(SQLiteDatabase db) {
db.execSQL ("create table if not exists " +
TABLE_NAME + "("
// 创 建 数 据 库 表
+ID+" integer primary key,"
+STEP + " integer)");
由于在手机模拟器中无法对基于传感器开发的应用进行方 便地测试与调试, 因此文中使用了一个开源工 具 SensorSimulator 来 辅 助 调 试 , 该 工 具 可 以 模 拟 传 感 器 的 变 化 从 而 达 到 在 手 机模拟器中也可以调试传感器应用程序的目的。 打开以下网址 可 以 找 到 SensorSimulator 的 下 载 链 接 : http://code.google.com/p/ openintents/wiki/SensorSimulator。
法将在数据库第一次被创建时调用, 本案例在该方法中执行了
创建表的代码。 onUpgrade 方法在数据库版本发生变化时调用。
4 Walki来自百度文库gActivity 类的开发
完 成 了 数 据 库 辅 助 类 的 开 发 后 就 可 以 开 发 WalkingActivity
类 了 , 其 是 应 用 程 序 的 用 户 界 面 , 主 要 功 能 是 按 照 XML 布 局
图 1 计步器应用程序界面
2.2 软件实现的功能
在程序运行时自动连接数据库, 读取历史数据并将其可视 化地显示到屏幕上。
程 序 运 行 后 会 自 动 启 动 一 个 Service 组 件 , 用 于 检 测 手 机 的加速度状态, 当用户携带手机步行时, 传感器会捕获到这个 动作并更新记录已走步数的计数器。 如果此时程序正在前台显 示, 那么在屏幕中除了刷新走过的步数之外, 还将播放一小段 走路的动画。
表 1 表 step_table 的所有字段情况
字段名 id step
字段含义 自动编号 走过的步数
数据类型 integer integer
是否为主键 是 否
3 数据库辅助类的开发
开发应用正式功能之前首先要开发对数据库访问的辅助类
MySQLiteHelper, 其 主 要 的 功 能 为 连 接 并 打 开 SQLite 数 据 库 ,
public static final String UPDATE_DATE = "up_date";
public MySQLiteHelper(Context context, String name,
CursorFactory factory,int version) {//构造器
super(context, name, factory, version);
wv.isMoving = true;
wv.postInvalidate(); //刷新 WalkingView
}
}
//重写 onCreate 方法,在 Activity 被创建时调用
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
图 2 手机状态栏中的计步器 Notification
40 2010. 23
NETWORK & COMMUNICATION
2.3 数据库表
本 应 用 程 序 使 用 了 Android 平 台 内 置 的 SQLite 嵌 入 式 数 据库, 数据库中包含一张名为 “step_table” 的表, 用来存放历 史的已走步数信息, 表 1 列出了 step_table 表各个字段的情况。
//数 据 库 名 称
public static final String DB_NAME = "step.db";
MySQLiteHelper mh; //声明数据库辅助类
SQLiteDatabase db;
// 数 据 库 对 象
Button btnToBackstage; //转入后台按钮
Button btnStopService; //停止服务按钮
}
public void onUpgrade(SQLiteDatabase db, int oldVersion
, int newVersion) {}//对 onUpgrade 方法的重写
}
在上述代码中创建了一个继承自 SQLiteOpenHelper 类的子
类 , 并 重 写 了 其 中 的 onCreate 和 onUpgrade 方 法 。 onCreate 方
ceiver{
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();//获得 Bundle
int steps = bundle.getInt("step");//读取步数
wv.stepsToday = steps;
点击 “删除数据” 按钮会删除掉数据库中存储的历史数据。 点 击 “停 止 服 务 ” 按 钮 会 停 止 后 台 Service 的 执 行 , 同 时 状态栏将不再显示计步器的 Notification。 点击 “转为后台” 按钮将关闭程序界面, 但保留后台执行 的 Service。 当用户按住手机屏幕的状态栏往下拖拉时, 会在展 开的状态栏中看到本程序的 Notification, 如图 2 所示。
Android 采 用 了 软 件 层 叠 的 架 构 , 包 括 以 Linux 为 核 心 的 底层、 以函数库和虚拟机为主的中间层以及以应用为主的上 层。 底层和中间层主要由 C 或 C++开发, 上层应用主要由 Java 编写。
Android 优 于 其 他 嵌 入 式 软 件 平 台 的 一 个 方 面 就 是 方 便 地 支持多种传感器, 可以感应包括手机姿态、 加速度、 磁场、 光 强、 温度、 压力等多种物理量的变化。 传感器应用也是目前比 较热门的技术 , 在 Android 平 台 下 开 发 基 于 传 感 器 的 应 用 也 比 较方便, 只需要在程序注册相应的传感器监听器即可。
代码如下:
package wyf.wpf;
//声 明 所 在 包
import android.content.Context;
// 引 入 相 关 类
… //省 略 部 分 引 入 相 关 类 的 代 码
import android.database.sqlite.SQLiteOpenHelper;
下文将结合计步器应用程序的开发来详细介绍如何在 Android 平 台 下 开 发 基 于 传 感 器 的 应 用 程 序 , 首 先 对 计 步 器 应 用 的功能和界面进行简单的介绍。
2.1 程序界面
程序运行界面如图 1 所示, 其中主窗体包括两个部分, 上半部分用于显示最近 7 天每天走过的步数, 以及今日走过的 步 数 , 通 过 一 个 自 定 义 的 View 来 实 现 ; 下 半 部 分 用 于 摆 放 3 个程序控制按钮。
Button btnDeleteData;
// 删 除 数 据 按 钮
StepUpdateReceiver receiver;
//定义一个继承自 BroadcastReceiver 的内部类
StepUpdateReceiver 来接受传感器的信息
public class StepUpdateReceiver extends BroadcastRe-
btnStopService =
(Button)findViewById(R.id.btnStop);
btnStopService.setOnClickListener(this);
btnDeleteData =
(Button)findViewById(R.id.btnDeleteData);
btnDeleteData.setOnClickListener(this);
setContentView(R.layout.main);// 设 置 当 前 屏 幕
wv = (WalkingView)
findViewById(R.id.walkingView);
btnToBackstage = (Button)
findViewById(R.id.btnDispose);
btnToBackstage.setOnClickListener(this);
文件的内容显示界面并与用户进行交互, 代码如下:
package wyf.wpf; import java.util.ArrayList; import android.app.Activity; … //省 略 部 分 引 入 相 关 类 的 代 码
//声 明 所 在 包 // 引 入 相 关 类
网络与通信
public class MySQLiteHelper extends SQLiteOpenHelper{
public static final String TABLE_NAME = "step_table";
public static final String ID = "id";
public static final String STEP = "step";
import android.view.View.OnClickListener;
import android.widget.Button;
public class WalkingActivity extends Activity implements
OnClickListener{
WalkingView wv; //WalkingView 对象引用
//注册 Receiver
receiver = new StepUpdateReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("wyf.wpf.WalkingActivity");
registerReceiver(receiver, filter);
//启动注册了传感器监听的 Service
Intent i = new Intent(this,WalkingService.class);
startService(i);
mh=new MySQLiteHelper(this,DB_NAME,null,1);
requireData(); //向 Service 请求今日走过步数
1 Android 及传感器
Android 是 以 Google 为 首 的 开 放 手 机 联 盟 (Open Handset Alliance— ——OHA) 于 2007 年 推 出 的 基 于 Linux 平 台 开 源 手 机 操 作 系 统 的 名 称 , 目 前 最 新 版 本 为 Android 2.1。 Android 旨 在 打造一个真正的标准化、 开放化的嵌入式手机软件平台。
}
//重写 onDestroy 方法
protected void onDestroy() {
unregisterReceiver(receiver); //注销 Receiver
2010. 23 41
super.onDestroy(); } //重写 OnClickListener 接口的 onClick 方法 public void onClick(View view) {} //方法:向 Service 请求今日走过的步数 public void requireData(){} } 上 述 代 码 为 Walking Activity 类 的 代 码 框 架 , 由 于
Android 平台下传感器技术开发计步器应用
苏亚光 吴亚峰 索依娜
摘 要: 结合实际案例, 介绍了在程序中注册传感器监听器对手机的加速度变化进行感应的方法, 以及使用 Intent 在 Activity 与 Service 之间进行通信, 以及对 Android 平台下的嵌入式数据库 SQLite 进行操作的技巧。 关键词: Android; SQLite; Notification; 传感器; 计步器
}
public void onCreate(SQLiteDatabase db) {
db.execSQL ("create table if not exists " +
TABLE_NAME + "("
// 创 建 数 据 库 表
+ID+" integer primary key,"
+STEP + " integer)");
由于在手机模拟器中无法对基于传感器开发的应用进行方 便地测试与调试, 因此文中使用了一个开源工 具 SensorSimulator 来 辅 助 调 试 , 该 工 具 可 以 模 拟 传 感 器 的 变 化 从 而 达 到 在 手 机模拟器中也可以调试传感器应用程序的目的。 打开以下网址 可 以 找 到 SensorSimulator 的 下 载 链 接 : http://code.google.com/p/ openintents/wiki/SensorSimulator。
法将在数据库第一次被创建时调用, 本案例在该方法中执行了
创建表的代码。 onUpgrade 方法在数据库版本发生变化时调用。
4 Walki来自百度文库gActivity 类的开发
完 成 了 数 据 库 辅 助 类 的 开 发 后 就 可 以 开 发 WalkingActivity
类 了 , 其 是 应 用 程 序 的 用 户 界 面 , 主 要 功 能 是 按 照 XML 布 局
图 1 计步器应用程序界面
2.2 软件实现的功能
在程序运行时自动连接数据库, 读取历史数据并将其可视 化地显示到屏幕上。
程 序 运 行 后 会 自 动 启 动 一 个 Service 组 件 , 用 于 检 测 手 机 的加速度状态, 当用户携带手机步行时, 传感器会捕获到这个 动作并更新记录已走步数的计数器。 如果此时程序正在前台显 示, 那么在屏幕中除了刷新走过的步数之外, 还将播放一小段 走路的动画。
表 1 表 step_table 的所有字段情况
字段名 id step
字段含义 自动编号 走过的步数
数据类型 integer integer
是否为主键 是 否
3 数据库辅助类的开发
开发应用正式功能之前首先要开发对数据库访问的辅助类
MySQLiteHelper, 其 主 要 的 功 能 为 连 接 并 打 开 SQLite 数 据 库 ,
public static final String UPDATE_DATE = "up_date";
public MySQLiteHelper(Context context, String name,
CursorFactory factory,int version) {//构造器
super(context, name, factory, version);
wv.isMoving = true;
wv.postInvalidate(); //刷新 WalkingView
}
}
//重写 onCreate 方法,在 Activity 被创建时调用
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
图 2 手机状态栏中的计步器 Notification
40 2010. 23
NETWORK & COMMUNICATION
2.3 数据库表
本 应 用 程 序 使 用 了 Android 平 台 内 置 的 SQLite 嵌 入 式 数 据库, 数据库中包含一张名为 “step_table” 的表, 用来存放历 史的已走步数信息, 表 1 列出了 step_table 表各个字段的情况。
//数 据 库 名 称
public static final String DB_NAME = "step.db";
MySQLiteHelper mh; //声明数据库辅助类
SQLiteDatabase db;
// 数 据 库 对 象
Button btnToBackstage; //转入后台按钮
Button btnStopService; //停止服务按钮
}
public void onUpgrade(SQLiteDatabase db, int oldVersion
, int newVersion) {}//对 onUpgrade 方法的重写
}
在上述代码中创建了一个继承自 SQLiteOpenHelper 类的子
类 , 并 重 写 了 其 中 的 onCreate 和 onUpgrade 方 法 。 onCreate 方
ceiver{
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();//获得 Bundle
int steps = bundle.getInt("step");//读取步数
wv.stepsToday = steps;
点击 “删除数据” 按钮会删除掉数据库中存储的历史数据。 点 击 “停 止 服 务 ” 按 钮 会 停 止 后 台 Service 的 执 行 , 同 时 状态栏将不再显示计步器的 Notification。 点击 “转为后台” 按钮将关闭程序界面, 但保留后台执行 的 Service。 当用户按住手机屏幕的状态栏往下拖拉时, 会在展 开的状态栏中看到本程序的 Notification, 如图 2 所示。
Android 采 用 了 软 件 层 叠 的 架 构 , 包 括 以 Linux 为 核 心 的 底层、 以函数库和虚拟机为主的中间层以及以应用为主的上 层。 底层和中间层主要由 C 或 C++开发, 上层应用主要由 Java 编写。
Android 优 于 其 他 嵌 入 式 软 件 平 台 的 一 个 方 面 就 是 方 便 地 支持多种传感器, 可以感应包括手机姿态、 加速度、 磁场、 光 强、 温度、 压力等多种物理量的变化。 传感器应用也是目前比 较热门的技术 , 在 Android 平 台 下 开 发 基 于 传 感 器 的 应 用 也 比 较方便, 只需要在程序注册相应的传感器监听器即可。
代码如下:
package wyf.wpf;
//声 明 所 在 包
import android.content.Context;
// 引 入 相 关 类
… //省 略 部 分 引 入 相 关 类 的 代 码
import android.database.sqlite.SQLiteOpenHelper;