当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > Android智能计步器基础编程

Android智能计步器基础编程 时间:2018-09-28      来源:未知

随着移动技术的发展,许多传统的电子产品也开始增加移动方面的功能,比如过去只能用来看时间的手表,现今也可以通过智能手机或家庭网络与互联网相连,显示来电信息、微信和天气信息等内容。这种新手表可被称作智能手表,这类产品主要是为消费者在不方便使用智能手机的情况下使用而设计的,比如正在骑自行车或手上提满了东西的时候.智能化设备提供先进的健康助手工具,其中计步器可以记录你一天的运动量,设置好身体基本信息后,通过先进的算法和内置传感器,可以监测行走的步数、行走的距离和消耗的卡路里,这些信息是你身体健康的保证。

  

开发所需的技术概况:

1.Android硬件平台使用

2.Android基本架构介绍

3.Android Activity和Service组件开发

4.Android 广播接收器

5.Android布局及UI控件使用

6.Android自定义View开发

7.Android 进程和线程开发

8.Android Sensor传感器编程

典型核心代码说明:

(1)Android自定义视图UI部分:

//自定义视图控件

public class CircleBar extends View{

//定义基本的配置参数

//定义笔刷

public Paint paint;//null

//定义圆环的宽度

public int roundWidth;//0

//定义圆环的半径

public int radius;//0

//定义控件的宽度的一半

public int centor;//0

//设置步数的进度

public int process;

//设置进度环进度(同步方法,同时只有一个线程访问!)

public synchronized void setProcess(int p){

process = p;

//刷新自定义控件

postInvalidate();

}

//获得进度环的进度(同步方法,同时只有一个线程访问!)

public synchronized int getProcess(){

return process;

}

 

//定义要运动的目标的值

public int max1;

//设置目标max1

//同步方法,同时只有一个线程访问!

public synchronized void setMax1(int m){

max1 = m;

//属性自定义控件

postInvalidate();//##3

}

//获得目标max1

//同步方法,同时只有一个线程访问!

public synchronized int getMax1(){

return max1;

}

//自定义控件的构造器

public CircleBar(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

//属性初始化

paint = new Paint();

roundWidth = 10;

process = 1;

max1 = 100;

}

//自定义控件的绘制方法实现

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

//绘制环型

//设置笔刷的颜色

paint.setColor(Color.GREEN);

//设置笔刷的宽度

paint.setStrokeWidth(roundWidth);

//设置为空心

paint.setStyle(Style.STROKE);

//设置光滑度

paint.setAntiAlias(true);

//获得控件的宽度

int width = this.getWidth();

//获得控件的宽度的一半

centor = width / 2;

//获得圆环的半径

radius = centor - (roundWidth / 2);

//画布的绘制

canvas.drawCircle(centor, centor, radius, paint);

   //1:圆心的x

//2:圆心的y

//3:圆环的半径

//4:绘制用的笔刷

 

//绘制文本:步数

//设置笔刷颜色

paint.setColor(Color.BLUE);

//设置笔刷的宽度大小

paint.setStrokeWidth(0);

//设置字体大小

paint.setTextSize(30);

//定义要显示的字符串

String step = "步数:   ";

//绘制文本

canvas.drawText(step + process, centor / 2, centor / 2, paint);

//1:文本的内容 

//2:文本的x

//3:文本的y

//4:绘制的笔刷

 

//绘制文本:目标

//设置笔刷的颜色

paint.setColor(Color.RED);

//设置字体的宽度

paint.setStrokeWidth(0);

//设置字体的大小

paint.setTextSize(30);

//设置字体的内容:

String max = "目标:   ";

//绘制文件:

canvas.drawText(max + max1, centor / 2, centor + (centor / 2), paint);

 

//绘制弧线:

//设置颜色

paint.setColor(Color.BLUE);

//设置笔刷的宽度(和圆环保持一致!)

paint.setStrokeWidth(roundWidth);

//创建矩形区域

RectF rectF = new RectF((centor - radius), (centor - radius), (centor + radius), (centor + radius));

//1:左上x

//2:左上y

//3:右下x

//4:右下y

//在画布上绘制弧线:

canvas.drawArc(rectF, 270, (360 * process) / max1 , false, paint);

//rectF:弧线区域

//270:弧线起始位置

//(360 * process) / max1:弧度

//false:没有圆心

//paint:绘制用的笔刷

}

}

(2)Android 服务组件及传感器:

//自定义服务及传感器使用:

public class MyServiceR3 extends Service implements SensorEventListener{

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

//1初始化

@Override

public void onCreate() {

// TODO Auto-generated method stub

super.onCreate();

//获得传感器的管理对象

SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

   //获得系统的传感器服务(SENSOR_SERVICE)

//通过sensorManager获得传感器对象Sensor(Sensor.TYPE_ACCELEROMETER)

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//注册传感器

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

//this:传感器的数据的监听者

//sensor:监听的传感器的对象

//SensorManager.SENSOR_DELAY_FASTEST:采样率(快)

}

//2启动服务

@Override

public void onStart(Intent intent, int startId) {

// TODO Auto-generated method stub

super.onStart(intent, startId);

}

//3销毁服务

@Override

public void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

}

 

//1:传感器准确系数变更

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

// TODO Auto-generated method stub

}

//2:获得传感器数据

public void onSensorChanged(SensorEvent arg0) {

synchronized (this) {

if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

计步器计步算法。。。

//发送隐式广播

//广播的”暗号”标示

String action = "com.cn.lk.rcm";

//创建意图对象

Intent intent = new Intent(action);

//意图携带信息

intent.putExtra("flag", true);

sendBroadcast(intent);

}

}

}

(3)Android广播接收器组件实现:

//自定义进度环业务对象

public CircleBar circleBar;

//内部类广播接收器(extends BroadcastReceiver)

class MyBroRcm1 extends BroadcastReceiver{

        //如果有广播被激活,处理广播

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

//获得意图的数据:布尔数据

boolean flag = intent.getBooleanExtra("flag", false);

//"flag":意图的键值

//false:默认值

//走一步的信号:

if(flag == true){

//获得当前进度

int pro = circleBar.getProcess();

//获得大目标

int gmax = circleBar.getMax1();

//判定是否超过极限

if((pro + 1) <= gmax){

//累计更新!

circleBar.setProcess(pro + 1);

}else{

//从头开始

circleBar.setProcess(0);

}

try {

//线程延迟1s

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

上一篇:基于物联网项目的共享内存

下一篇:C语言-指针

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部