基于Android的手机计步器的设计与实现+源代码
基于Android开发的智能健身跟踪器设计与实现
基于Android开发的智能健身跟踪器设计与实现智能健身跟踪器是一种结合了传感技术、数据分析和移动应用的智能设备,可以帮助用户记录运动数据、分析运动状态、制定健身计划等。
随着人们对健康生活的重视和智能设备的普及,智能健身跟踪器在市场上受到越来越多的关注和需求。
本文将介绍基于Android开发的智能健身跟踪器的设计与实现过程。
1. 智能健身跟踪器的功能需求分析在设计智能健身跟踪器之前,首先需要明确其功能需求。
一般而言,智能健身跟踪器应该具备以下功能:记录运动数据:包括步数、距离、卡路里消耗等。
分析运动状态:根据用户的运动数据,分析用户的运动状态,如跑步速度、心率等。
制定健身计划:根据用户的运动数据和目标,制定个性化的健身计划。
提供实时反馈:在运动过程中提供实时反馈,引导用户正确进行运动。
数据同步:将用户的运动数据同步到云端,方便用户随时查看和管理。
2. 技术选型与架构设计基于Android开发智能健身跟踪器,需要选择合适的技术和架构。
一般可以采用MVVM(Model-View-ViewModel)架构,使用Kotlin语言进行开发。
同时,可以利用Android Jetpack组件库提供的LiveData、ViewModel等组件来简化开发流程。
在技术选型方面,可以利用Android传感器API获取设备的加速度、陀螺仪等传感数据;使用Room数据库存储用户的运动数据;通过Retrofit库实现与后端服务器的数据交互;借助Google Fit API获取用户的健康数据等。
3. 功能模块设计与实现3.1 用户登录模块用户登录模块是智能健身跟踪器的入口,用户可以通过输入账号密码或第三方登录方式登录应用。
在登录成功后,可以同步用户的个人信息和历史运动数据。
3.2 运动数据记录模块运动数据记录模块负责记录用户的运动数据,包括步数、距离、卡路里消耗等。
可以通过Android传感器获取用户的步数和运动轨迹,并将数据存储到本地数据库中。
一个稳定好用的android计步器源代码
private int CountTimeState = 0;
public static int CURRENT_SETP = 0;
public static int TEMP_STEP = 0;
private int lastStep = -1;
float betweentime = System.currentTimeMillis()
- perCalTime;
if (betweentime >= minTime && betweentime < maxTime) {
return onSensorChangeListener;
}
public void setOnSensorChangeListener(
OnSensorChangeListener onSensorChangeListener) {
perCalTime = System.currentTimeMillis();
}
} else if (average >= vermaxValue) {
if (average >= maxValue) {
CountTimeState = 3;
} else if (CountTimeState == 3) {
CURRENT_SETP++;
}
}
};
timer.schedule(task, 0, 2000);
private final String TAG = "StepDcretor";
// alpha 由 t / (t + dT)计算得来,其中 t 是低通滤波器的时间常数,dT 是事件报送频率
基于Android的人体运动计步器系统的设计与实现[权威资料]
基于Android的人体运动计步器系统的设计与实现[权威资料]基于Android的人体运动计步器系统的设计与实现摘要:随着Android智能手机的进一步普及,针对Android智能手机内嵌的加速度传感器进行研究,利用人体行走过程中加速度传感器采集数据信息的变化规律,实现对行人脚步探测与计步系统。
该系统内容包括两部分:行人运动数据采集与预处理模块设计和行人脚步识别探测模块设计,能够有效的实现运动数据采集、预处理、步态探测和计步的功能。
关键词:Android;加速度传感器;步态探测TP393 A 1009-3044(2016)15-0094-04Abstract: With the further popularization of Android smartphones,aimed at the acceleration sensor embedded in the Android smartphone conduct a study , based on the changing law of the data information collected by the acceleration sensor during the walking process of human body to realize the pedestrian detection and measurement system. The system consist of two parts: data acquisition andpretreatment module design and pedestrian detection module design,it can effectively achieve the movement of data acquisition, pre-processing, gaitdetection and step counter function.Key words: Android; acceleration sensor;gait detection随着科技的发展,多功能智能设备的应用越来越受到人们的关注,智能手机作为人们工作生活中的必需品,不断地为人们带来快捷和方便。
从零开始学android实现计算器功能示例分享(计算器源码)
从零开始学android实现计算器功能⽰例分享(计算器源码)下⾯是效果展⽰:复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tvResult"android:layout_width="fill_parent"android:layout_height="wrap_content"android:height="50dp"android:text="@string/tvResult"/></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btnBackspace"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="150dp"android:layout_marginLeft="10dp"android:text="@string/btnbackspace"/><Buttonandroid:id="@+id/btnCE"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="150dp"android:text="@string/btnCE"/></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:width="75dp"android:text="@string/btn7"/><Buttonandroid:id="@+id/btn8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btn8"/><Buttonandroid:id="@+id/btnDiv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btnDiv"/></LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:width="75dp"android:text="@string/btn4"/><Buttonandroid:id="@+id/btn5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btn5"/><Buttonandroid:id="@+id/btn6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btn6"/><Buttonandroid:id="@+id/btnMul"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btnMul"/></LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:width="75dp"android:text="@string/btn1"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btn2"/><Buttonandroid:id="@+id/btn3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btn3"/></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:width="75dp"android:text="@string/btn0"/><Buttonandroid:id="@+id/btnC"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btnC"/><Buttonandroid:id="@+id/btnEqu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btnEqu"/><Buttonandroid:id="@+id/btnSub"android:layout_width="wrap_content"android:layout_height="wrap_content"android:width="75dp"android:text="@string/btnSub"/></LinearLayout></LinearLayout>复制代码代码如下:package com.example.week2;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;public class MainActivity extends Activity implements OnClickListener{ //声明⼀些控件Button btn0=null;Button btn1=null;Button btn2=null;Button btn3=null;Button btn4=null;Button btn5=null;Button btn6=null;Button btn7=null;Button btn8=null;Button btn9=null;Button btnBackspace=null;Button btnCE=null;Button btnMul=null;Button btnDiv=null;Button btnEqu=null;TextView tvResult=null;//声明两个参数。
Android计算器源码
计算器源码Java程序代码:package ymq.demo03;import android.app.Activity;import android.os.Bundle;import android.view.*;import android.widget.*;public class demo03 extends Activity {/** Called when the activity is first created. */String str="";EditText et;int c=0,flag=0;double b=0.0,g=0.0,f=0.0;View vi;public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stubmenu.add(0, 1, 1, "退出");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stubif(item.getItemId()==1){finish();}return super.onOptionsItemSelected(item);}//计算方法public double calculater(){switch(c){case 0:f=g;break;case 1:f=b+g;break;case 2:f=b-g;break;case 3:f=b*g;break;case 4:f=b/g;break;}b=f;return f;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);//获得按键final Button number[]=new Button[10];final Button fuhao[]=new Button[11];fuhao[0]=(Button)findViewById(R.id.button01);fuhao[1]=(Button)findViewById(R.id.button02);fuhao[2]=(Button)findViewById(R.id.button03);fuhao[3]=(Button)findViewById(R.id.button04);fuhao[4]=(Button)findViewById(R.id.button05);fuhao[5]=(Button)findViewById(R.id.button06);fuhao[6]=(Button)findViewById(R.id.buttonce);fuhao[7]=(Button)findViewById(R.id.buttonc);fuhao[8]=(Button)findViewById(R.id.zheng);fuhao[9]=(Button)findViewById(R.id.kaifang);fuhao[10]=(Button)findViewById(R.id.pingfang);number[0]=(Button)findViewById(R.id.button0);number[1]=(Button)findViewById(R.id.button1);number[2]=(Button)findViewById(R.id.button2);number[3]=(Button)findViewById(R.id.button3);number[4]=(Button)findViewById(R.id.button4);number[5]=(Button)findViewById(R.id.button5);number[6]=(Button)findViewById(R.id.button6);number[7]=(Button)findViewById(R.id.button7);number[8]=(Button)findViewById(R.id.button8);number[9]=(Button)findViewById(R.id.button9);et=(EditText) findViewById(R.id.textView1);et.setText(str);fuhao[6].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubstr="";et.setText(str);vi=v;}});fuhao[7].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubb=0.0;c=0;g=0.0;str="";et.setText(str);}});fuhao[8].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(vi!=fuhao[5]&&str!=""){char ch=str.charAt(0);if(ch=='-')str=str.replace("-","");elsestr="-"+str;et.setText(str);}}});fuhao[9].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){double a=Double.parseDouble(str);str=Math.sqrt(a)+"";et.setText(str);});fuhao[10].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){double a=Double.parseDouble(str);str=""+a*a;et.setText(str);}}});//设定数字按键number[0].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=0;et.setText(str);flag=0;}else{char ch1[];ch1=str.toCharArray();if(!(ch1.length==1&&ch1[0]=='0')){str+=0;et.setText(str);}}vi=v;}});number[1].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=1;et.setText(str);flag=0;}else{str+=1;et.setText(str);}vi=v;}});number[2].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=2;et.setText(str);flag=0;}else{str+=2;et.setText(str);}vi=v;}});number[3].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=3;et.setText(str);flag=0;}else{str+=3;et.setText(str);}vi=v;}});number[4].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=4;et.setText(str);flag=0;}else{str+=4;et.setText(str);}vi=v;}});number[5].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=5;et.setText(str);flag=0;}else{str+=5;et.setText(str);}vi=v;}});number[6].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=6;et.setText(str);flag=0;}else{str+=6;et.setText(str);}vi=v;}});number[7].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=7;et.setText(str);flag=0;}else{str+=7;et.setText(str);}vi=v;}});number[8].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=8;et.setText(str);flag=0;}else{str+=8;et.setText(str);}vi=v;}});number[9].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(flag==1){str="";str+=9;et.setText(str);flag=0;}else{str+=9;et.setText(str);}vi=v;}});//设定符号键//加fuhao[0].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){c=1;}else{g=Double.parseDouble(str);calculater();str=""+f;et.setText(str);c=1;flag=1;}}}});//减fuhao[1].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){c=2;}else{g=Double.parseDouble(str);calculater();str=""+f;et.setText(str);c=2;flag=1;vi=v;}}}});//乘fuhao[2].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){c=3;}else{g=Double.parseDouble(str);calculater();str=""+f;et.setText(str);flag=1;vi=v;}}}});//除fuhao[3].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""){if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){c=4;}else{g=Double.parseDouble(str);calculater();str=""+f;et.setText(str);c=4;flag=1;vi=v;}}}});//等号fuhao[4].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str!=""&&vi!=fuhao[0]&&vi!=fuhao[1]&&vi!=fuhao[2]&&vi!=fuhao[3 ]){g=Double.parseDouble(str);calculater();str=""+f;et.setText(str);flag=1;vi=v;}}});//小数点fuhao[5].setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubif(str==""){str+=".";et.setText(str);}else{char ch1[];int x=0;ch1=str.toCharArray();for(int i=0;i<ch1.length;i++)if(ch1[i]=='.')x++;if(x==0){str+=".";et.setText(str);}}}});}}布局文件:main.xml<?xml version="1.0"encoding="utf-8"?><LinearLayoutandroid:background="#ff808080"xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:layout_gravity="center_vertical"android:id="@+id/zhengfu"><EditTextandroid:text="TextView"android:id="@+id/textView1"android:textSize="25sp"android:textColor="#000000"android:layout_gravity="center"android:gravity="left"android:cursorVisible="false"android:editable = "false"android:layout_height="wrap_content"android:layout_width="fill_parent"android:layout_marginLeft="4dip"android:layout_marginRight="4dip"android:layout_marginTop="4dip"android:layout_weight="1.5"></EditText><TableLayoutandroid:id="@+id/tablelayout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_margin="4dip"android:layout_weight="10"><LinearLayoutandroid:id="@+id/linearlayout02"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"><Buttonandroid:layout_width="50dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:id="@+id/buttonc"android:text="@string/shan"></Button><Buttonandroid:layout_width="50dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:id="@+id/buttonce" android:text="@string/shanchu"></Button></LinearLayout><TableRowandroid:id="@+id/row0"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/one" android:id="@+id/button1"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/two" android:id="@+id/button2"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/three" android:id="@+id/button3"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/jia" android:id="@+id/button01"></Button></TableRow><TableRowandroid:id="@+id/row1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/fore" android:id="@+id/button4"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/five" android:id="@+id/button5"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/six" android:id="@+id/button6"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/jian" android:id="@+id/button02"></Button></TableRow><TableRowandroid:id="@+id/row2"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/seven" android:id="@+id/button7"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/eight" android:id="@+id/button8"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/nine" android:id="@+id/button9"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/cheng" android:id="@+id/button03"></Button></TableRow><TableRowandroid:id="@+id/row3"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/zero" android:id="@+id/button0"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:id="@+id/button06" android:text="@string/dihao"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/dengyu" android:id="@+id/button05"></Button><Buttonandroid:layout_width="40dip"android:layout_height="fill_parent"android:layout_weight="1"android:textSize="25sp"android:text="@string/chu" android:id="@+id/button04"></Button></TableRow><LinearLayoutandroid:id="@+id/tableRow1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_weight="1"><Buttonandroid:textSize="25sp"android:layout_height="fill_parent"android:layout_width="50dp"android:layout_weight="1" android:text="@string/zhengfu"android:id="@+id/zheng"></Button><Buttonandroid:id="@+id/pingfang"android:textSize="25sp"android:layout_height="fill_parent"android:layout_width="50dp"android:layout_weight="1" android:text="@string/ping"></Button><Buttonandroid:id="@+id/kaifang"android:textSize="25sp"android:layout_height="fill_parent"android:layout_width="50dp"android:layout_weight="1" android:text="@string/kai"></Button></LinearLayout></TableLayout></LinearLayout>主配置文件:<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="ymq.demo03"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="7"/><application android:icon="@drawable/icon"android:label="@string/app_name"><activity android:name=".demo03"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><categoryandroid:name="UNCHER"/></intent-filter></activity></application></manifest>。
基于Android的手机计步器的设计与实现+源代码
专业工程综合实训设计报告目录第一章绪论 (1)1.1课题的背景及意义 (1)1.2系统框架 (1)第二章系统分析 (3)2.1 系统可行性分析 (3)2.1.1 功能可行性分析 (3)2.1.2 运行环境可行性分析 (3)2.2 开发环境简介 (3)2.2.1 Java Development kit(JDK)介绍 (3)2.2.2 Android SDK 介绍 (3)2.2.3 Eclipse开发工具介绍 (4)2.2.4 Android Development Tools(ADT)介绍 (4)第三章 Android开发常用到的技术及环境搭建 (5)3.1 Android开发常用到的技术 (5)3.1.1 Activity (5)3.1.2 Service (6)3.1.3 Content Provider 内容提供者 (7)3.1.4 Intent 信使 (7)3.2环境搭建 (7)3.2.1安装JDK (7)3.2.2安装Eclipse (8)3.2.3 Android SDK安装 (8)3.2.4 ADT安装 (8)第四章手机计步器的设计与实现 (9)4.1计步器功能的设计 (9)4.2计步器功能的实现 (11)4.2.1 计步开始及暂停 (11)4.2.2 复位键 (12)4.2.3设置步长 (12)4.2.4设置体重 (12)4.2.5历史记录的查看及删除 (13)第五章计步器的界面效果 (19)5.1用户界面 (19)5.2设置界面 (20)5.3历史界面 (22)5.4日历选择界面 (23)5.5用户离开界面 (24)第六章系统测试与分析 (25)6.1 测试过程 (25)6.2 测试分析 (38)结论 (39)参考文献 (40)第一章绪论1.1课题的背景及意义当今社会,手机已经成为人们工作生活中必不可少的一项通讯和娱乐工具,随着手机的不断更新,手机的各种高层服务和应用层出不穷。
安卓开发的自制计算器源代码
这是本人自己用安卓编写的计算器,代码的优化可能有所问题,不过大家都在学习阶段,欢迎大家批评指正,还是上源码吧。
先来运行图package com.example.nanchen.exam_1_1;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button btn0;private Button btn1;private Button btn2;private Button btn3;private Button btn4;private Button btn5;private Button btn6;private Button btn7;private Button btn8;private Button btn9;private Button btnAdd;private Button btnSub;private Button btnMul;private Button btnDiv;private Button btnDec;private Button btnEqual;private Button btnClear;private Button btnBackSpace;private TextView textView_result;double num1 = 0,num2 = 0,result = 0;//定义存储结果和两个操作数boolean isCheckEqu = false;//检测是否点击了等于int op = 0;//定义运算符boolean hasDec = false;boolean hasOp = false;@Overrideprotected void onCreate Bundle savedInstanceStatesuper.onCreate savedInstanceState;setContentView yout.activity_main;textView_result = TextView findViewById R.id.result;btn0 = Button findViewById R.id.btn0;btn1 = Button findViewById R.id.btn1;btn2 = Button findViewById R.id.btn2;btn3 = Button findViewById R.id.btn3;btn4 = Button findViewById R.id.btn4;btn5 = Button findViewById R.id.btn5;btn6 = Button findViewById R.id.btn6;btn7 = Button findViewById R.id.btn7;btn8 = Button findViewById R.id.btn8;btn9 = Button findViewById R.id.btn9;btnAdd = Button findViewById R.id.btn10;btnSub = Button findViewById R.id.btn11;btnMul = Button findViewById R.id.btn12;btnDiv = Button findViewById R.id.btn13;btnDec = Button findViewById R.id.btn14;btnEqual = Button findViewById R.id.btn15;btnClear = Button findViewById R.id.clear;btnBackSpace = Button findViewById R.id.backSpace;btn0.setOnClickListener this;btn1.setOnClickListener this;btn2.setOnClickListener this;btn3.setOnClickListener this;btn4.setOnClickListener this;btn5.setOnClickListener this;btn6.setOnClickListener this;btn7.setOnClickListener this;btn8.setOnClickListener this;btn9.setOnClickListener this;btnAdd.setOnClickListener this;btnSub.setOnClickListener this;btnDec.setOnClickListener this;btnDiv.setOnClickListener this;btnEqual.setOnClickListener this;btnMul.setOnClickListener this;btnClear.setOnClickListener this;btnBackSpace.setOnClickListener this;@Overridepublic void onClick View vswitch v.getIdcase R.id.btn0:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString0 =textView_result.getText.toString;if myString0.equals"0"myString0 = "";myString0 += "0";textView_result.setText myString0;break;case R.id.btn1:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString1 =textView_result.getText.toString;if myString1.equals"0"myString1 = "";myString1 += "1";textView_result.setText myString1;break;case R.id.btn2:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString2 =textView_result.getText.toString;if myString2.equals"0"myString2 = "";myString2 += "2";textView_result.setText myString2;break;case R.id.btn3:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString3 =textView_result.getText.toString;if myString3.equals"0"myString3 = "";myString3 += "3";textView_result.setText myString3;break;case R.id.btn4:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString4 =textView_result.getText.toString;if myString4.equals"0"myString4 = "";myString4 += "4";textView_result.setText myString4;break;case R.id.btn5:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString5 =textView_result.getText.toString;if myString5.equals"0"myString5 = "";myString5 += "5";textView_result.setText myString5;break;case R.id.btn6:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString6 =textView_result.getText.toString;if myString6.equals"0"myString6 = "";myString6 += "6";textView_result.setText myString6;break;case R.id.btn7:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString7 =textView_result.getText.toString;if myString7.equals"0"myString7 = "";myString7 += "7";textView_result.setText myString7;break;case R.id.btn8:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString8 =textView_result.getText.toString;if myString8.equals"0"myString8 = "";myString8 += "8";textView_result.setText myString8;break;case R.id.btn9:if isCheckEqutextView_result.setText null;isCheckEqu=false;String myString9 =textView_result.getText.toString;if myString9.equals"0"myString9 = "";myString9 += "9";textView_result.setText myString9;break;case R.id.btn10:if hasOpdoEqual;//显示出来当前的答案String myStringAdd =textView_result.getText.toString;if myStringAdd.equals nullreturn;num1 = Double.valueOf myStringAdd;textView_result.setText null;// 这里被清除了op = 1;isCheckEqu = false;hasDec = false;hasOp = true;break;case R.id.btn11:if hasOpdoEqual;String myStringSub =textView_result.getText.toString;if myStringSub.equals nullreturn;num1 = Double.valueOf myStringSub;textView_result.setText null;op = 2;isCheckEqu = false;hasDec = false;hasOp = true;break;case R.id.btn12:if hasOpdoEqual;String myStringMul =textView_result.getText.toString;if myStringMul.equals nullreturn;num1 = Double.valueOf myStringMul;textView_result.setText null;op = 3;isCheckEqu = false;hasDec = false;hasOp = true;break;case R.id.btn13:if hasOpdoEqual;String myStringDiv =textView_result.getText.toString;if myStringDiv.equals nullreturn;num1 = Double.valueOf myStringDiv;textView_result.setText null;op = 4;hasDec = false;isCheckEqu = false;hasOp = true;break;case R.id.btn14:if isCheckEqutextView_result.setText null;isCheckEqu=false;if hasDec//如果已经有小数点了,则弹出一个对话框AlertDialog.Builder builder = new AlertDialog.Builder MainActivity.this;builder.setTitle"警告";builder.setMessage"输入错误,一个数字不能有两个小数点!";builder.setNegativeButton"取消", new DialogInterface.OnClickListener@Overridepublic void onClick DialogInterface dialog, int which;builder.show;return;hasDec = true;String myString14 =textView_result.getText.toString;myString14 += ".";textView_result.setText myString14;break;case R.id.btn15:doEqual;hasOp = false;break;case R.id.backSpace:String myString =textView_result.getText.toString;trytextView_result.setText myString.substring0,myString.length -1;catch Exception etextView_result.setText"0";break;case R.id.clear:textView_result.setText"0";break;default:break;/*** 按下等于*/private void doEqualStringmyStringEqu=textView_result.getText.toString;if myStringEqu.equals nullreturn;num2=Double.valueOf myStringEqu;textView_result.setText null;switch opcase 0:result=num2;break;case 1:result=num1+num2;break;case 2:result=num1-num2;break;case 3:result=num1*num2;break;case 4:result=num1/num2;break;default:result=0;break;textView_result.setText String.valueOf result;isCheckEqu=true;<?xml version="1.0" encoding="utf-8"?>LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.nanchen.exam_1_1.MainActivity"<!--显示结果-->LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/result"android:gravity="end"android:textSize="40sp"android:text="@string/zero"LinearLayoutLinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:orientation="horizontal"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="@string/clear"android:id="@+id/clear"android:textAllCaps="false"android:gravity="center"android:textSize="25sp"Buttonandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="@string/backspace"android:id="@+id/backSpace"android:textAllCaps="false"android:gravity="center"android:textSize="25sp" LinearLayout<!--789/-->LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/seven"android:id="@+id/btn7"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/eight"android:id="@+id/btn8"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/nine"android:id="@+id/btn9"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/del"android:id="@+id/btn13"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1" LinearLayout<!--456*-->LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/four"android:id="@+id/btn4"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/five"android:id="@+id/btn5"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/six"android:id="@+id/btn6"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/mul"android:id="@+id/btn12"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1" LinearLayout<!--123- -->LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/one"android:textSize="30sp"android:id="@+id/btn1"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/two"android:id="@+id/btn2"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/three"android:id="@+id/btn3"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/sub"android:id="@+id/btn11"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1" LinearLayout<!--0.=+-->LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/zero1"android:id="@+id/btn0"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/dec"android:id="@+id/btn14"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/equal"android:id="@+id/btn15"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"Buttonandroid:layout_width="0dp"android:text="@string/add"android:id="@+id/btn10"android:textSize="30sp"android:gravity="center"android:layout_height="wrap_content"android:layout_weight="1"LinearLayoutLinearLayoutandroid:layout_weight="4"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="0dp"TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:text="@string/string1"TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/string2"android:textSize="20sp"LinearLayoutLinearLayout。
基于Android平台的计步器的设计与实现-软件工程毕业论文
南阳理工学院本科生毕业设计(论文)学院(系):软件学院专业:软件工程学生:张三指导教师:张三完成日期 2016 年 04 月南阳理工学院本科生毕业设计(论文)基于Android平台的爱运动计步器的设计与实现Design and Implementation of the Loving Sports Pedometer Based on Android Platform总计:毕业设计(论文) 33页表格:1个图片:1个南阳理工学院本科毕业设计(论文)基于Android平台的爱运动计步器的设计与实现Design and Implementation of the Loving Sports Pedometer Based on Android Platform学院(系):软件学院专业:软件工程学生姓名:张三学号: 111指导教师(职称):张三讲师评阅教师:张三完成日期: 2016年04月30日南阳理工学院Nanyang Institute of Technology基于Android平台的爱运动计步器的设计与实现软件工程张三[摘要]随着人们生活水平和生活质量的提高,人们越来越关注自己的身体健康。
而跑步成为人们最受欢迎的运动方式,运动软件可以在人们锻炼身体的时候提供极大的帮助。
本文针对运动轨迹和计步,设计一款基于Android平台的运动软件。
本系统通过使用百度鹰眼、重力传感器和数据库技术,实现了运动轨迹追踪、计步、查看运动记录等功能。
本系统界面友好,操作简单,可以稳定运行。
本款运动软件适合空闲时间不足的人群,方便人们随时锻炼身体,并查看自己的运动情况。
[关键词]运动软件;运动轨迹;Android;百度鹰眼Design and Implementation of the Loving SportsPedometer Based on Android PlatformSoftware Engineering Major zhangsanAbstract:With the improvement of people's living standards and quality of life, people pay more and more attention to their health.Running has become one of the most popular ways of exercise,and sports software can provide great convenience for the people to exercise.The thesis designs a sports software based on Android platform for the sports trace and the step counting. The system uses baidu hawkeye, gravity sensors and database technology realizing the trajectory tracking,step counting,viewing athletic records and other functions.The system provides a friendly user interface,simple operation and can be stable operation.The sports software is suitable for people having less time and it is also convenient for people to exercise at any time and viewing athletic records.Key words:s ports software;sports trace; Android;baidu hawkeye目录1绪论11.1软件开发背景11.2论文研究的目的和意义11.3论文主要研究内容11.4论文组织结构12相关技术介绍22.1 Android系统的组成22.1.1应用程序层22.1.2应用程序框架层22.1.3系统运行库层22.1.4 Linux内核层32.2 Activity的生命周期32.3 Android平台的搭建42.3.1 JDK的安装42.3.2 Eclipse的安装52.3.3 Android SDK 的安装52.3.4 ADT的安装52.3.5创建DVD53需求分析53.1可行性分析63.1.1经济可行性分析63.1.2技术可行性分析63.1.3操作可行分析63.2功能需求分析63.3非功能性需求分析73.3.1易用性73.3.2可靠性83.3.3安全性83.3.4运行环境83.4面向对象分析83.4.1设置信息用例分析83.4.2运动记录用例分析83.4.3计步信息用例分析93.4.4系统用例分析94系统设计104.1概要设计104.2详细设计114.2.1系统总体设计114.2.2计步模块详细设计114.2.3轨迹追踪模块详细设计124.2.4音乐播放模块详细设计134.2.5闹铃模块详细设计134.2.6平台分享模块详细设计144.2.7天气预报模块详细设计154.2.8更换主题模块详细设计154.2.9运动记录模块详细设计164.3数据库设计164.3.1数据库分析164.3.2数据库概念设计及表结构18 5系统实现195.1计步模块实现195.2轨迹追踪模块实现205.3音乐播放模块实现225.4闹铃模块实现225.5天气预报模块实现235.6平台分享模块实现245.7更换主题模块实现255.8运动记录模块实现266测试286.1计步模块测试286.2轨迹追踪模块测试296.3运动记录模块测试30结束语31参考文献32致谢331 绪论1.1 软件开发背景随着人们生活水平和生活质量的提高,人们在日常通讯、娱乐的过程中越来越多的使用手机,但是随着手机的不断更新,人们也对手机的要求越来越高,也越来越关注手机的高层服务和各种应用。
基于Android平台的计步软件的设计与实现
摘要随着社会的变革,科学技术的进步,如何利用最新的科技为运动爱好者提供合理化,人性化的建议越来成为学者和企业研究的热点。
其中由于手表传感器的灵敏性,利用手表传感器记录下运动爱好者的运动数据并进行分析的技术得到了广泛的发展.因为手表的便捷便携性,获得了一大部分人的喜爱。
近年来,Android操作系统在移动智能手机领域的较好的应用,使得基于Android操作系统的移动软件的应用越来越广泛,移动软件也使得人们的生活变得越来越方便,让生活更加的智能化。
其中,基于Android操作系统的计步软件开发也引起了人们的关注。
然而,由于手机传感器的局限性,使得利用手机传感器对软件用户的运动数据进行采集时会容易出现较大的误差。
例如走路的时候如果把手机拿在手里步数有时不会增加,但是放在衣服口袋里就可以计步,另外如果跑步时带着手机也会给用户带来许多的不方便。
因此,本文结合手机的显示、分析功能和手表传感器的灵敏性和手表本身的可便携性开发了一款基于Android的计步软件,该软件可以通过蓝牙技术获取手表通过手表传感器采集来的数据并进行分析与显示等。
该软件的功能主要分为三大模块:第一,通过蓝牙传输协议实现手表到手机的计步数据传输功能;第二,手机接收到传输来的计步数据后对数据进行分析、显示和管理;第三,把分析后的计步数据同步到阿里云计算中心实现数据的共享和备份功能。
在系统的设计过程中,首先分析了系统的功能需求和非功能需求,在此基础上,对系统进行了详细地设计,对系统各子模块:个人信息、账户管理、意见反馈、账户管理、登陆、注册和帮助等的功能的实现进行了分析,最后,对系统的功能和性能进行了测试。
该系统在功能上能实现并满足客户的需求,性能很好,达到要求。
关键字:计步软件;Android;蓝牙技术ABSTRACTWith the change of the society, the progress of science and technology, how to make use of the latest technology to provide sports enthusiasts with a reasonable and humanized suggestion is to become a hot research for sports enthusiasts. Due to the sensitivity of the watch sensor, the use of the watch sensor to record the motion data and the analysis of the movement of the data and has been widely developed. Because of the convenience of the watch, so it gets a large part of people's love.In recent years, the application of Android operating system in the field of mobile smart phones, the application of mobile software based on Android operating system is becoming more and more popular. Mobile software also makes people's life more convenient and intelligent. Among them, the software development based on the Android operating system has caused the attention of people. However, due to the limitations of the mobile sensor, it is easy to make error of the mobile sensor to collect the motion data of the software users. For example, if you walk the phone in the hands, the number of steps will not increase, but placed in the pocket of the clothes can be taken. In addition to running with a mobile phone will give users a lot of inconvenience.Therefore, this paper combines the mobile phone's display, analysis function and the sensitivity of the watch sensor and the portability of the watch itself. And it developed a Android based software, the software can be acquired through the Bluetooth technology watch sensor data collected to analyze and display, etc. The function of the software is divided into three major modules: first, through the Bluetooth transmission protocol to achieve the mobile phone's data transfer function; second, the mobile phone to receive data after the transfer of the data analysis, display and management; third, the analysis of the number of steps to achieve data sharing and backup functions of Ali cloud computing center. In the process of system design, the functional requirements and non-functional requirements of the system are analyzed, and the functions of the system are analyzed, such as personal information, account management, feedback, account management, login, registration and help. The system can achieve the function and meet the needs of customers, the performance is very good, to meet the requirements.KEYWORDS: step software; Android; Bluetooth technology目录摘要 (i)ABSTRACT ...................................................................................................................... i i 1 绪论 . (1)1.1研究背景及意义 (1)1.2国内外研究现状 (3)1.2.1 Android平台 (3)1.2.2 计步器 (3)1.3研究目的 (5)1.4本文结构 (5)1.5本章小结 (6)2 相关技术介绍 (7)2.1W EB服务技术 (7)2.2SQL ITE数据库技术 (8)2.3基于A NDROID操作系统 (8)2.3.1 Android简介 (8)2.3.2 Android操作系统优势 (9)2.3.3 Android 基本框架 (10)2.4蓝牙通信技术 (12)2.5开发工具介绍 (12)2.5.1 Java Development kit(JDK)介绍 (13)2.5.2 Android SDK 介绍 (13)2.5.3 Eclipse开发工具介绍 (13)2.5.4 Android Development Tools(ADT)介绍 (13)2.5.5 Android开发常用到的技术 (14)2.6GPS相关理论技术知识 (15)2.6.1 GPS定位原理 (15)2.6.2 Android中GPS类简介 (16)2.7本章小结 (16)3 用户需求分析及可行性分析 (17)3.1用户总体需求分析 (17)3.2功能性需求分析 (18)3.2.1 计步数据分析子系统 (18)3.2.2 系统管理子系统 (19)3.2.3 计步数据采集与同步子系统 (19)3.3非功能性需求分析 (21)3.3.1 性能需求 (21)3.3.2 可靠性需求 (21)3.3.2 安全性需求 (21)3.3.3 适用性需求 (22)3.4可行性分析 (22)3.4.1 经济可行性 (22)3.4.2 技术可行性 (22)3.5本章小结 (23)4 系统设计 (24)4.1软件架构设计 (24)4.1.1 UI层 (25)4.1.2 Domain层 (26)4.1.3 Resource层 (26)4.2业务逻辑及业务实体类设计 (28)4.2.1 数据存储设计 (28)4.2.2 计步数据分析子系统 (29)4.2.2 系统管理子系统 (31)4.2.3 计步数据采集与同步子系统 (32)4.3系统界面设计 (33)4.3.1 主界面设计 (33)4.3.2 历史界面分析 (34)4.3.3 设置界面分析 (35)4.3.4 分享界面分析 (36)4.4数据库设计 (37)4.4.1 数据库ER图 (38)4.4.2 数据库表详细说明 (38)4.5本章小结 (39)5 计步软件的实现 (40)5.1计步数据分析子系统的实现 (40)5.1.1 数据显示 (40)5.1.2 历史数据 (43)5.2系统管理子系统的实现 (45)5.2.1 个人信息 (45)5.2.2 账户管理 (46)5.2.3 意见反馈 (47)5.2.4 登录 (47)5.2.5 注册 (49)5.2.6 帮助 (51)5.3计步数据采集与同步子系统 (52)5.3.1 计步数据采集硬件电路 (52)5.3.2 手表同步到手机 (53)5.3.3 手机同步到云服务器 (54)5.4本章小结 (55)6 计步软件的测试 (56)6.1配置测试环境 (56)6.2设计测试用例 (56)6.3编写测试代码 (57)6.4测试案例分析 (58)6.5测试结果 (58)6.6本章小结 (58)7 总结与展望 (59)7.1总结 (59)7.2展望 (60)参考文献 (61)作者简历及攻读硕士学位期间取得的研究成果 (63)独创性声明 (64)学位论文数据集 (65)1 绪论本章主要介绍本文的研究背景及意义和对本文进行研究时做的相关的调研工作,国内外研究的现状,最后简要阐述了本文的研究内容与目标以及本文的组织结构。
Android计步模块实例代码(类似微信运动)
Android计步模块实例代码(类似微信运动)最近在项⽬中研究计步模块,每天0点开始记录当天的步数,类似微信运动。
碰到了不少坑今天有时间整理出来给⼤家看看。
做之前在google、baidu、github上搜了个遍没找到好的,⼤多数都是需要在后台存活,需要后台Service。
对于现在的各⼤⼿机⼚商为了提⾼电池的续航⾥程(省电),基本上AlertManager、android.intent.action.BOOT_COMPLETED、后台Service都是被⼲掉的。
后台保活策略Service,基本上没什么⽤,被⼿机系统⼲掉只是时间问题,所以我认为最好也不要去做,就算后台存活了,⽤户看到这个app⾮常费电也会被删除的。
⽬前android计步有两种⽅式系统计步芯⽚在Android4.4版本之后,部分机型实现了Sensor.TYPE_STEP_COUNTER传感器,⽤于纪录⽤户⾏⾛的步数。
从⼿机开机开始纪录,⼿机关机时重置为0。
这个记步芯⽚是系统级别的,相对之前⽼版本的传感器记步,性能有⼀些优化:不会因为App单独⽤了记步的功能⽽额外耗电系统芯⽚记步是持续的,能够优化部分机型后台不记步的问题。
加速度传感器计算⽅式加速度传感器⾮常耗电,导致App的耗电量很⾼,影响⽤户体验。
需要后台实时运⾏才能实现记步的功能,如果App进程被系统或者安全软件杀死,导致记步功能没办法使⽤根据以上两种⽅式实现计步,⼿机提供计步传感器就使⽤Sensor.TYPE_STEP_COUNTER⽅式(app后台关闭也可以计步),如果不提供就使⽤SensorManager.SENSOR_DELAY_UI⽅式(app需要保持后台运⾏)。
项⽬结构:计步Service使⽤单独进程,所以使⽤到进程间通信aidl,todaystepcounterlib为库⽂件⽤于在单独进程中实现计步算法,app 依赖todaystepcounterlib项⽬获取当前步数展⽰。
毕业论文 基于安卓平台的手机计步器的设计
毕业论文题目基于安卓平台的手机计步器的设计摘要Android是一个针对移动设备的操作系统和软件平台,随着智能手机的兴起,渐渐成为了占有市场最大比重的移动平台操作系统,同时也越发地受到广大用户的青睐。
Android采用 Linux 内核,由 Google 和开放手机联盟于2007年11月5日发布。
容许使用 Java语言来开发和管理代码。
作为一个年轻并且流行的移动应用平台,目前android软件的应用面还是比较广泛的,比如聊天,通讯,上网等等,但涉及传感器方面的应用软件还比较少。
本文在分析讨论Android手机软件开发原理的同时,针对智能手机用户日常使用的实际情况,对用户手机的日常功能需求进行调查。
发现对于经常走路上班或者锻炼的朋友来说拥有一款精美、功能齐全的计步器是非常必要的。
将精确计量和智能运行技术完美结合,只需开启软件,通过感应器传来的信息,App能够变化算法,测得你的走路步数,速度以及消耗的卡路里量与行走历程。
一款合适的计步器在无形中会量化用户的健身效果,帮助用户坚持锻炼以达到更好的健身效果。
关键词Android 智能手机平台计步器 JavaTitle The design of mobile phone pedometer based on the android platformAbstractAndroid is an operating system and software platform for mobile devices. With the development of Smartphone, it gradually became the biggest proportion in the market of mobile operating system. At the same time, it became more and more popular among users. Android uses the Linux kernel, announced on November 5, 2007 by Google and the open handset alliance, and it allow to use Java language to develop and manage the code. As a young and popular mobile application platform, the application of android is relatively wide; such as chat, communication and internet. However, the application of sensors is less. The thesis of this essay is to analyze and discuss the principle of software development of Android mobile phone. Also, the another purpose in this essay is to conduct an investigation in the daily functional demand for mobile phone users based on the situation of daily uses of smart phone users. The research shows that it is very important to have a fully functional pedometer for people who often walk to work or exercise. The pedometer makes a perfect combination of accurate measurement and intelligent operational technology, when the software are ready to run, it can use the massage which acquire from sensor to calculate the step frequency ,speed, the consumption of calories and walking journey of your walk. An appropriate pedometer can quantify user’s fitness effect in potentially; in this way it can make users to keep exercising in order to achieve better fitness effect.Keywords android smartphone platform java pedometer目录1.前言 (1)1.1智能手机系统开发背景 (1)1.2课题的目的与意义 (2)1.3本文主要研究内容 (2)2.相关技术介绍 (4)2.1开发工具及环境简介 (4)2.1.1 开发工具 (4)2.1.2 开发环境 (5)2.2ANDROID SDK常见公共类库介绍 (6)2.2.1 Android的传感器 (6)2.2.2 Android界面Activity介绍 (6)3.系统需求分析 (8)3.1可行性研究 (8)3.1.1 经济可行性 (8)3.1.2 技术可行性 (8)3.1.3 操作可行性 (9)3.2性能需求分析 (10)3.2.1 实用性原则 (10)3.2.2 可扩展性与可维护性原则 (10)3.2.3 安全可靠性原则 (11)3.2.4 用户界面美观原则 (11)3.3 数据需求分析 (13)4.系统设计 (14)4.1系统总体结构设计 (14)4.2 系统静态模型设计 (15)5.系统实现 (16)5.1布局界面的设计 (16)5.1.1主界面的设计 (16)5.1.2设置界面的设计 (17)5.2各功能的实现 (18)5.2.1 计步开始及暂停 (18)5.2.2 记录数据清零 (18)5.2.3 设置步长 (18)5.2.4 设置体重 (19)5.2.5 设置运动状态 (19)6.系统测试 (20)6.1测试开始停止模块 (20)6.1.1 测试准备 (20)6.1.2测试过程 (20)6.2测试总结 (23)5.结论 (24)致谢 (25)参考文献 (26)附录 (27)1.前言1.1 智能手机系统开发背景当今社会,手机已经成为人们工作生活中必不可少的一项通讯和娱乐工具,随着手机的不断更新,手机的各种高层服务和应用层出不穷。
基于Android的手机计步器的设计与实现+源代码
专业工程综合实训设计报告目录第一章绪论 (1)1。
1课题的背景及意义 (1)1.2系统框架 (1)第二章系统分析 (3)2。
1 系统可行性分析 (3)2.1.1 功能可行性分析 (3)2.1。
2 运行环境可行性分析 (3)2。
2 开发环境简介 (3)2.2。
1 Java Development kit(JDK)介绍 (3)2.2.2 Android SDK 介绍 (3)2.2。
3 Eclipse开发工具介绍 (4)2。
2。
4 Android Development Tools(ADT)介绍 (4)第三章 Android开发常用到的技术及环境搭建 (5)3.1 Android开发常用到的技术 (5)3.1。
1 Activity (5)3。
1。
2 Service (6)3。
1.3 Content Provider 内容提供者 (7)3.1.4 Intent 信使 (7)3。
2环境搭建 (7)3。
2。
1安装JDK (7)3。
2.2安装Eclipse (8)3。
2。
3 Android SDK安装 (8)3.2。
4 ADT安装 (8)第四章手机计步器的设计与实现 (9)4.1计步器功能的设计 (9)4.2计步器功能的实现 (11)4。
2。
1 计步开始及暂停 (11)4.2。
2 复位键 (12)4.2。
3设置步长 (12)4.2。
4设置体重 (12)4。
2.5历史记录的查看及删除 (13)第五章计步器的界面效果 (19)5.1用户界面 (19)5.2设置界面 (20)5。
3历史界面 (23)5。
4日历选择界面 (24)5.5用户离开界面 (25)第六章系统测试与分析 (26)6。
1 测试过程 (26)6。
2 测试分析 (39)结论 (40)参考文献 (41)第一章绪论1.1课题的背景及意义当今社会,手机已经成为人们工作生活中必不可少的一项通讯和娱乐工具,随着手机的不断更新,手机的各种高层服务和应用层出不穷。
android手机计步软件的设计与实现
摘要随着智能手机市场的不断扩大,智能手机应用开发己经展现出其强大的市场价值。
Android最具创新的特点是其开放性体系架构,这使得Android平台具体无限的吸引力。
近来越来越多的人对自身健康问题感到关注,运动健身类软件也逐渐成为了移动互联网业务的一个主要应用方向。
本文以运动健身作为研究方向,设计并实现一款基于Android智能手机的计步应用软件。
该应用软件通过手机GPS功能来获取用户实时的经纬度信息,借助地球球面两点间的距离公式计算用户的运动距离,从而测得用户所走的步数、速度以及消耗的热量。
此外,该软件包括使用SQLite数据库查询用户的历史运动信息以及设置运动者的身高、体重和运动目标等参数的功能。
本系统界面友好、操作便捷,具有良好的可扩展性和可维护性;系统经过测试,可以稳定运行,对于日常走路上班或者锻炼的人来说非常合适,方便人们及时掌握自己锻炼的情况,达到高效锻炼的效果。
关键词:Android; GPS;计步器; SQLite;运动健身ABSTRACTWith the continuous expansion of the smart Phone market,the smartPhone applications development has demonstrated its strong market value.Android's most innovative feature is its open architecture, which makes the Android platform unlimited appeal.Recently, more and more people are concerned about their own health problems, sports and fitness class software is becoming a major application direction of the mobile Internet business.Therefore, the context make use of the sports and fitness as its research direction to design and implement the pedometer application software which based on Android-based smartphone.The core functionality is that through the GPS function of mobile phones ,it can get the latitude and longitude information in real time about the user, use the distance between two points of the Earth's spherical formula to calculate the user's movement distance, which used to measure the number of steps to go, speed and calories burned. Besides,this software’s function includs that using the SQLite database to query the history information about user and set the height,weight and target of step sports about the user.The system’s interface is quite friendly and easy to handle the system,.it has good scalability and maintainability; the system has been tested and operated very well, the software is very suitable for the people who walks to work daily or likes exercising themselves, it is convenientfor people to know their exercise information at any time and in any place ,so that we can achieve our purpose to hava a high efficiency exercise.Keywords:Android; GPS; pedometer; SQLite; fitness目录1 绪论 (3)1.1 研究背景 (3)1.2 研究目的和意义 (3)1.3 研究内容 (4)1.4 本文结构 (4)2 相关技术综述 (5)2.1 Android (5)2.1.1 Android简介 (5)2.1.2 Android特性 (6)2.1.3 Android 基本框架 (6)2.1.4 Android系统的四大组件 (8)2.2 开发环境介绍 (9)2.2.1 Eclipse简介 (9)2.2.2 ADT (10)2.2.3 Android SDK (10)2.2.4 SQLite数据库 (10)2.3 GPS相关理论技术知识 (10)2.3.1 GPS定位原理 (10)2.3.2 Android中GPS类简介 (11)3 需求分析 (12)3.1 功能需求 (12)3.2 数据的需求分析 (13)3.3 系统运行环境 (14)4 系统设计 (14)4.1 功能模块设计 (14)4.1.1 计步功能 (14)4.1.2 查询运动信息功能 (16)4.1.3 设置参数功能 (18)4.1.4 退出系统功能 (19)4.2 数据设计 (20)5 系统实现 (21)5.1 Android环境搭建 (21)5.2 软件结构设计 (23)5.3 计步功能 (25)5.4 查询运动信息功能 (29)5.5 设置参数功能 (30)5.6 退出系统功能 (31)6 结束语 (33)参考文献 (34)附录 (35)致谢 (56)1绪论1.1研究背景自上世纪80年代第一部手机诞生以来,随着计算机技术的进步,手机也经历了从模拟器到GSM、2.5G再到今天的3G手机如此一个发展历程[1]。
跑步计步器(Android应用使用Java开发)
跑步计步器(Android应用使用Java开发)Android应用的鼎盛发展给人们的生活带来了诸多便利和娱乐方式,如今,越来越多的人开始注重健身和跑步。
跑步计步器作为一种常见的运动辅助工具,可以帮助用户记录跑步的时间、距离和步数等信息,同时还可以提供个性化的训练计划和健身建议。
本文将介绍如何使用Java语言开发一款Android跑步计步器应用。
一、准备工作在开始开发之前,我们需要安装Android Studio开发环境并配置好Java开发环境。
然后,新建一个Android项目,选择合适的包名和项目名称,并选择最低支持的Android版本。
二、界面设计跑步计步器的用户界面通常包含以下几个主要元素:1. 计步显示区:用来显示当前跑步的步数和跑步的时间。
2. 距离显示区:用来显示当前跑步的距离。
3. 开始/停止按钮:用户点击开始按钮后,计步器开始记录用户的步数和时间;点击停止按钮后,计步器停止记录并显示最终的统计结果。
4. 训练计划按钮:用户可以点击该按钮查看个性化的训练计划和健身建议。
5. 设置按钮:用户可以点击该按钮进行一些基本设置,如单位设置、目标步数设置等。
针对以上的需求,我们可以设计一个简洁美观的界面。
可以尝试使用LinearLayout和RelativeLayout等布局管理器来实现页面的布局和组件的排列。
三、计步功能实现1. 获取传感器权限:在AndroidManifest.xml文件中添加获取传感器权限的声明,以便应用能够通过传感器获取步数信息。
2. 获取传感器对象:在Java代码中使用SensorManager类的getDefaultSensor()方法获取传感器对象,并注册一个传感器事件监听器。
3. 传感器事件监听器的实现:定义一个实现SensorEventListener接口的类,重写onSensorChanged()方法,在该方法中实现对步数的监听和更新。
4. 步数统计和显示:根据传感器返回的数值进行步数的统计,并将结果实时显示在界面的计步显示区。
基于ANDROID的手机计步器的设计与实现论文
职场大变样社区():下载毕业设计成品全套资料,全部50元以下毕业设计(论文)任务书第1页第2页第3页基于android平台的手机计步器的设计与实现摘要ANDROID是一个针对移动设备的操作系统和软件平台,随着社会的发展ANDROID平台,渐渐成为了占有市场最大比重的移动平台操作系统,同时越来越多的人也接触到这个平台,并且用这个平台创造了许多不可思议的成果。
ANDROID 采用LINUX内核,由GOOGLE和开放手机联盟于2007年11月5日发布。
容许使用JA V A的多种语言来开发并且可以统一管理代码。
ANDROID本身是一个年轻的开发平台,它可以存在更多的创造性更多的可能性,而且相对于移动应用软件来说也是一个不可多得的平台,目前ANDROID软件的应用面还是比较广泛的,比如手机应用,手机游戏,电脑应用等等方面,但是在传感器这一方面似乎涉足较少,因此这个研究可以有很大的可行性。
本文在分析讨论ANDROID手机软件开发原理的同时,针对智能手机用户日常使用的实际情况,对用户手机的日常功能需求进行调查。
发现对于经常走路上班或者锻炼的朋友来说拥有一款计步器是非常必要的。
用户只需开启APP,通过手机自带传感器传来的信息,APP便可以测得你的走路步数,速度以及消耗的卡路里量。
这样每天对于这些手机常带在、带在身边的人可以有更大的好处,通过APP就可以知道自己每天在健康的运动,现在越来越多的人注重健康,因此这个计步器可以让人们在每天上下班等各种途径中,通过步走上传至APP看到自己的每日运动量一款合适的计步器在无形中会量化用户的健身效果,帮助用户坚持锻炼以达到更好的健身效果。
因此这个APP的设计首先是符合时代潮流的,同时也可以让更多的人去推广。
本计步器系统目前已经基本可以完成对不同状态下的步数的统计以及所消耗的卡路里的直观显示,简单的操作也是其系统的一大特点,开始、暂停、清零的功能运作使客户能方便快捷的对自己一天的健康运动有所掌握。
android计算器源码
这是我本人做的Android 简单计算器源代码。
可以实现普通四则运算2,10,16进制转换。
常见异常处理,可以实现activity屏幕跳转。
算法用逆波兰实现。
本项目所有代码不涉及任何知识产权问题,完全由自己学习android时候写的,所以各位可以放心下载。
AndroidManifest.xml代码<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="my.calu"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/meinv"android:label="@string/app_name"><activity android:name=".Main"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><categoryandroid:name="UNCHER"/></intent-filter></activity></application><uses-sdk android:minSdkVersion="4"/></manifest>//layout 代码<?xml version="1.0"encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/background"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><Buttonandroid:id="@+id/binary_sign"android:layout_width="73px"android:layout_height="52px"android:text="10/2"android:layout_x="14dp"android:layout_y="148dp"/><Buttonandroid:id="@+id/sexadecimal_sign"android:layout_width="73px"android:layout_height="52px"android:text="10/16"android:layout_x="88dp"android:layout_y="148dp"/><Buttonandroid:id="@+id/add_sign"android:layout_width="73px"android:layout_height="52px"android:text="+"android:layout_x="240dp"android:layout_y="382dp"/><EditTextandroid:id="@+id/editview"android:layout_width="295px"android:layout_height="76px"android:text=""android:textSize="18sp"android:layout_x="8dp"android:layout_y="14dp"/><Buttonandroid:id="@+id/number0"android:layout_width="73px"android:layout_height="52px"android:text="0"android:layout_x="89dp"android:layout_y="382dp"/> <Buttonandroid:id="@+id/point_sign"android:layout_width="73px"android:layout_height="52px"android:text="."android:layout_x="10dp"android:layout_y="382dp"/> <Buttonandroid:id="@+id/sub_sign"android:layout_width="73px"android:layout_height="52px"android:text="-"android:layout_x="240dp"android:layout_y="322dp"/> <Buttonandroid:id="@+id/mult_sign"android:layout_width="73px"android:layout_height="52px"android:text="*"android:layout_x="240dp"android:layout_y="262dp"/> <Buttonandroid:id="@+id/dev_sign"android:layout_width="73px"android:layout_height="52px"android:text="÷"android:layout_x="240dp"android:layout_y="202dp"/> <Buttonandroid:id="@+id/number3"android:layout_width="73px"android:layout_height="52px"android:text="3"android:layout_x="170dp"android:layout_y="322dp"/> <Buttonandroid:id="@+id/number6"android:layout_width="73px"android:layout_height="52px"android:text="6"android:layout_x="170dp"android:layout_y="262dp"/> <Buttonandroid:id="@+id/equal_sign"android:layout_width="73px"android:layout_height="52px"android:text="="android:layout_x="167dp"android:layout_y="382dp"/> <Buttonandroid:id="@+id/number1"android:layout_width="73px"android:layout_height="52px"android:text="1"android:layout_x="10dp"android:layout_y="322dp"/> <Buttonandroid:id="@+id/number5"android:layout_width="73px"android:layout_height="52px"android:text="5"android:layout_x="90dp"android:layout_y="262dp"/> <Buttonandroid:id="@+id/number4"android:layout_width="73px"android:layout_height="52px"android:text="4"android:layout_x="10dp"android:layout_y="262dp"/> <Buttonandroid:id="@+id/number9"android:layout_width="73px"android:layout_height="52px"android:text="9"android:layout_x="170dp"android:layout_y="202dp"/><Buttonandroid:id="@+id/number8"android:layout_width="73px"android:layout_height="52px"android:text="8"android:layout_x="90dp"android:layout_y="202dp"/><Buttonandroid:id="@+id/number7"android:layout_width="73px"android:layout_height="52px"android:text="7"android:layout_x="10dp"android:layout_y="202dp"/><Buttonandroid:id="@+id/number2"android:layout_width="73px"android:layout_height="52px"android:text="2"android:layout_x="90dp"android:layout_y="322dp"/><Buttonandroid:id="@+id/clear_sign"android:layout_width="138px"android:layout_height="wrap_content"android:text="C"android:layout_x="174dp"android:layout_y="148dp"/></AbsoluteLayout>主代码package my.calu;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;//package expression;import java.util.ArrayList;import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main extends Activity implements OnClickListener {private static final char Str = 0;private Buttonnumber0,number1,number2,number3,number4,number5,number6,number7,numbe r8,number9;private Buttonbinary_sign,sexadecimal_sign,clear_sign,point_sign,add_sign,sub_sign, mult_sign,dev_sign,equal_sign;private EditText edittext;private String buffer="";private boolean first_is_number=false ,after_equal=false,flage_10zhijing=true,flage_16zhijing=true;//初始化事件public void init() {this.edittext=(EditText) findViewById(R.id.editview);this.edittext.setOnClickListener(this);this.number0=(Button) findViewById(R.id.number0);this.number0.setOnClickListener(this);this.number1=(Button) findViewById(R.id.number1);this.number1.setOnClickListener(this);this.number2=(Button) findViewById(R.id.number2);this.number2.setOnClickListener(this);this.number3=(Button) findViewById(R.id.number2);this.number0.setOnClickListener(this);this.number3=(Button) findViewById(R.id.number3);this.number3.setOnClickListener(this);this.number4=(Button) findViewById(R.id.number4);this.number4.setOnClickListener(this);this.number5=(Button) findViewById(R.id.number5);this.number5.setOnClickListener(this);this.number6=(Button) findViewById(R.id.number6);this.number6.setOnClickListener(this);this.number7=(Button) findViewById(R.id.number7);this.number7.setOnClickListener(this);this.number8=(Button) findViewById(R.id.number8);this.number8.setOnClickListener(this);this.number9=(Button) findViewById(R.id.number9);this.number9.setOnClickListener(this);this.point_sign=(Button) findViewById(R.id.point_sign);this.point_sign.setOnClickListener(this);this.equal_sign=(Button) findViewById(R.id.equal_sign);this.equal_sign.setOnClickListener(this);this.add_sign=(Button) findViewById(R.id.add_sign);this.add_sign.setOnClickListener(this);this.sub_sign=(Button) findViewById(R.id.sub_sign);this.sub_sign.setOnClickListener(this);this.mult_sign=(Button) findViewById(R.id.mult_sign);this.mult_sign.setOnClickListener(this);this.dev_sign=(Button) findViewById(R.id.dev_sign);this.dev_sign.setOnClickListener(this);this.clear_sign=(Button) findViewById(R.id.clear_sign);this.clear_sign.setOnClickListener(this);this.binary_sign=(Button) findViewById(R.id.binary_sign);this.binary_sign.setOnClickListener(this);this.sexadecimal_sign=(Button)findViewById(R.id.sexadecimal_sign);this.sexadecimal_sign.setOnClickListener(this);}//判断字符串是否为全为0-9的整形数public boolean is10Numeric(String str){Pattern pattern = pile("[0-9]*");Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false;}return true;}//判断字符串是否为全为0-1的整形数public boolean is2Numeric(String str){Pattern pattern = pile("[0-1]*");Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false;}return true;}//判断字符串是否为全为0-f的整形数public boolean is16Numeric(String str){Pattern pattern = pile("[0-f]*");Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false;}return true;}//判断最后一位和第一位是否为数字public boolean isnumber ( String s) {int i=s.length();char c=s.charAt(i-1);char k=s.charAt(0);// System.out.println("---firstnumber--"+k);// System.out.println("---70c=charAt--"+c);if(s.equals(null)) {return false;}if((c >= '0' && c <= '9')&& (k >='0' && k <= '9') ){return true;}elsereturn false;}//判断是否有运算符public boolean have_signal(String s){after_equal=false;boolean have=s.contains("+");if(s.contains("+")||s.contains("-") || s.contains("*") || s.contains("/"))return true;elsereturn false;}//-------堆栈算法---------public void deal_equal (String s){// System.out.println("Hello World!");//中缀 => 后缀表达式SSSssss// String s = "8-3*5"; //中缀String S = ""; //后缀char[] Operators = new char[s.length()];int Top = -1;for (int i = 0; i < s.length(); i++){char C = s.charAt(i);// System.out.print(C);switch(C){case' ' :b reak;case'+' : //操作符case'-' :while (Top >= 0) //栈不为空时{char c = Operators[Top--]; //pop Operatorif (c == '('){Operators[++Top] = c; //push Operatorbreak;}else{S = S + c;}}O perators[++Top] = C; //push OperatorS += " ";break;case'*' : //操作符case'/' :w hile (Top >= 0) //栈不为空时{char c = Operators[Top--]; //pop Operatorif (c == '('){Operators[++Top] = c; //push Operatorbreak;}else{if (c == '+' || c == '-'){Operators[++Top] = c; //push Operatorbreak;}else{S = S + c;}}}O perators[++Top] = C; //push OperatorS += " ";b reak;case'(' : //操作符Operators[++Top] = C;S += " ";break;case')' : //操作符while (Top >= 0) //栈不为空时{char c = Operators[Top--]; //pop Operatorif (c == '('){break;}else{S = S + c;}}S += " ";break;default : //操作数S = S + C;break;}}while (Top >= 0){S = S + Operators[Top--]; //pop Operator}// System.out.print(Operators);// System.out.println(S); //后缀//后缀表达式计算double[] Operands = new double[S.length()];// System.out.println(S.length());double x, y, v;Top = - 1;String Operand = "";for (int i = 0; i < S.length(); i++){char c = S.charAt(i);if ((c >= '0' && c <= '9') || c == '.'){Operand += c;// System.out.print(Operand+" ");}if ((c == ' ' && Operand != "") || i == S.length()) {Operands[++Top] = ng.Double.parseDouble(Operand) ; //push OperandsOperand = "";}if (c == '+' || c == '-' || c == '*' || c == '/'){if ((Operand != "")){Operands[++Top] = ng.Double.parseDouble(Operand) ;//push Operands// System.out.println(Operators);Operand = "";}y = Operands[Top--]; //pop 双目运算符的第二操作数 (后进先出)注意操作数顺序对除法的影响x = Operands[Top--]; //pop 双目运算符的第一操作数switch (c){case'+' :v = x + y;break;case'-' :v = x - y;break;case'*' :v = x * y;break;case'/' :v = x / y; // 第一操作数 / 第二操作数注意操作数顺序对除法的影响break;default :v = 0;break;}Operands[++Top] = v; //push 中间结果再次入栈}}v = Operands[Top--]; //pop 最终结果// System.out.println("-------result-------"+v);String result=v+"";this.edittext.setText(result);}/** Called when the activity is first created. *///------------------函数入口--wangwei-------------//@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);this.init();//跳转// Intent intent=new Intent();//// Intent intent=TwoActivity.this.getlntent(); // Bundle bundle=intent.getExtras();// String name=bundle.getString(buffer);//}//触发事件后的动作// @Overridepublic void onClick(View v) {try {// TODO Auto-generated method stubif(v.getId()==this.number0.getId()) {buffer=buffer+0;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number1.getId()) { buffer=buffer+1;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number2.getId()) { buffer=buffer+2;this.edittext.setText(buffer);}else if(v.getId()==this.number3.getId()) { buffer=buffer+3;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number4.getId()) { buffer=buffer+4;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number5.getId()) { buffer=buffer+5;this.edittext.setText(buffer);}else if(v.getId()==this.number6.getId()) {buffer=buffer+6;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number7.getId()) {buffer=buffer+7;this.edittext.setText(buffer);// first_is_number=true;}else if(v.getId()==this.number8.getId()) {buffer=buffer+8;this.edittext.setText(buffer);first_is_number=true;}else if(v.getId()==this.number9.getId()) {buffer=buffer+9;this.edittext.setText(buffer);// first_is_number=true;//---------------2进制的转换-----------}else if(v.getId()==this.binary_sign.getId()) { boolean is10=is10Numeric(buffer);boolean is2=is2Numeric(buffer);if(is10&&(flage_10zhijing==true)){int num=Integer.parseInt(buffer);flage_10zhijing=false;buffer=Integer.toBinaryString(num)+"" ;System.out.println("is10"+flage_10zhijing);}else if (is2&&(flage_10zhijing==false)){flage_10zhijing=true;buffer=Integer.valueOf(buffer,2).toString()+"" ;}else {//System.out.println(" 不是10进制也不是二进制");//buffer="0000000000";}this.edittext.setText(buffer);//----------------16进制的转换--------------}else if(v.getId()==this.sexadecimal_sign.getId()) { boolean is16=false,is10=false;is16=is16Numeric(buffer);is10=is10Numeric(buffer);System.out.println("is16 --- "+is16);System.out.println("flage_16zhijing"+flage_16zhijing);if(is10&&flage_16zhijing){int num=Integer.parseInt(buffer);flage_16zhijing=false;buffer=Integer.toHexString(num) +"" ;System.out.println("jinruis10 "+flage_16zhijing);}else if ((is16==true)&&(flage_16zhijing==false)){System.out.println("jinruis16 "+flage_16zhijing);flage_16zhijing=true;buffer=Integer.valueOf(buffer,16).toString() +"" ;//buffer="0000000000";}else {//System.out.println(" 不是16进制也不是1 0进制");//buffer="0000000000";}this.edittext.setText(buffer);//-------------四则运算-------------}else if(v.getId()==this.point_sign.getId()) {boolean isnumber;isnumber= isnumber ( buffer);if(isnumber)buffer=buffer+".";this.edittext.setText(buffer);}else if(v.getId()==this.sub_sign.getId()) {boolean isnumber;isnumber= isnumber ( buffer);if(isnumber)buffer=buffer+"-";this.edittext.setText(buffer);}else if(v.getId()==this.mult_sign.getId()) {boolean isnumber;isnumber= isnumber ( buffer);if(isnumber)buffer=buffer+"*";this.edittext.setText(buffer);}else if(v.getId()==this.dev_sign.getId()) {boolean isnumber;isnumber= isnumber ( buffer);if(isnumber)buffer=buffer+"/";this.edittext.setText(buffer);}else if(v.getId()==this.add_sign.getId()) {boolean isnumber;isnumber= isnumber ( buffer);if(isnumber){buffer=buffer+"+";this.edittext.setText(buffer);}else {//buffer="000000000000";this.edittext.setText(buffer);}//-------------------清除-------------------}else if(v.getId()==this.clear_sign.getId()) {// if(after_equal) {// int len=buffer.length();// if(len >=1) {// buffer= (String )buffer.subSequence(0, len-1); // }//// } else {// buffer="";// }buffer="";this.edittext.setText(buffer);//--------------计算结果------------------------}else if(v.getId()==this.equal_sign.getId()) {boolean isnumber;if(buffer.equals(null)) {buffer=" ";this.edittext.setText(buffer);}else {isnumber= isnumber ( buffer);boolean have_signal=have_signal(buffer);if(isnumber&&have_signal){after_equal=true;deal_equal(buffer);}}}} catch (Exception e) {// TODO: handle exception}// System.out.println("-----327------"+buffer);}}。
android计算器简单实现代码
android计算器简单实现代码本⽂实例为⼤家分享了android计算器的具体实现代码,供⼤家参考,具体内容如下java代码:package com.itheima74.simplecalculator4;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;import android.widget.Toast;import com.iflytek.cloud.InitListener;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechSynthesizer;import com.iflytek.cloud.SpeechUtility;import com.iflytek.cloud.SynthesizerListener;import com.iflytek.cloud.util.ResourceUtil;import java.util.ArrayList;/*** 简易计算器(第三版)* 功能介绍:* 1.⽀持连续计算* 2.⽀持离线语⾳* 3.科⼤讯飞在线(离线)语⾳合成SDK使⽤步骤:* a.下载SDK,注册APPID* b.拷贝libs⽬录下Msc.jar⾄⼯程libs⽬录,右键:add as library* c.创建assets⽬录,拷贝tts⽂件夹下3个离线发⾳⼈资源* d.创建jniLibs⽬录,拷贝armeabi⽂件夹,x86⽂件(视具体⼿机机型⽽定) * e.初始化SDK*/public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView tv;// 显⽰控件private ArrayList<String> mList;// 存储⽤户输⼊集合private double mResult;// 计算结果,当除数为0时,⽆法计算结果,默认为初始值0private boolean mFlag = true;// 控制在线语⾳功能是否开启的变量,默认开启@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initSDK();initView();initList();}/*** 2.初始化离线语⾳** @param flag 离线语⾳开启或关闭开关* @param msg 要朗读的⽂字*/private void initLocalHeCheng(boolean flag, String msg) {if (flag) {//1.创建SpeechSynthesizer对象,第⼆个参数:本地合成传InitListenerSpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, new InitListener() {@Overridepublic void onInit(int code) {}});//2.合成参数设置//设置引擎类型为本地mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);//设置本地发⾳⼈mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//加载本地合成资源,resPath为本地合成资源路径mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());// 设置语速mTts.setParameter(SpeechConstant.SPEED, "60");// 设置⾳调mTts.setParameter(SpeechConstant.PITCH, "50");// 设置⾳量mTts.setParameter(SpeechConstant.VOLUME, "100");// 设置播放器⾳频流类型mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");//设置合成⾳频保存位置(可⾃定义保存位置),保存在“./sdcard/iflytek.pcm”//保存在SD卡需要在AndroidManifest.xml添加写SD卡权限//如果不需要保存合成⾳频,注释该⾏代码//mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");//3.开始合成mTts.startSpeaking(msg, mSynListener);}}// 获取发⾳⼈资源路径private String getResourcePath() {StringBuffer tempBuffer = new StringBuffer();// 合成通⽤资源tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet")); tempBuffer.append(";");// 发⾳⼈资源tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaoyan.jet")); return tempBuffer.toString();}/*** 1.初始化SDK*/private void initSDK() {SpeechUtility.createUtility(this, SpeechConstant.APPID + "=58ba4628");}// 创建⼀个选项菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}// 处理选项菜单的点击事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.exit:this.finish();break;case R.id.open_local_voice:mFlag = true;mFlag = false;break;}return super.onOptionsItemSelected(item);}/*** 2.在线语⾳合成,朗读** @param flag 控制⽅法的执⾏,true:执⾏,false:不执⾏* @param msg 需要朗读的⽂字*//*private void initYuYinHeCheng(boolean flag, String msg) {if (flag) {//1.创建SpeechSynthesizer对象, 第⼆个参数:本地合成时传InitListenerSpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null);//2.合成参数设置,详见《科⼤讯飞MSC API⼿册(Android)》SpeechSynthesizer 类mTts.setParameter(SpeechConstant.VOICE_NAME, mVoiceName);//设置发⾳⼈mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速mTts.setParameter(SpeechConstant.VOLUME, "80");//设置⾳量,范围0~100mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端//设置合成⾳频保存位置(可⾃定义保存位置),保存在“./sdcard/iflytek.pcm”//保存在SD卡需要在AndroidManifest.xml添加写SD卡权限//如果不需要保存合成⾳频,注释该⾏代码//mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");//3.开始合成mTts.startSpeaking(msg, mSynListener);}}*/// 合成监听器private SynthesizerListener mSynListener = new SynthesizerListener() {//开始播放@Overridepublic void onSpeakBegin() {}//缓冲进度回调//percent为缓冲进度0~100,beginPos为缓冲⾳频在⽂本中开始位置,endPos表⽰缓冲⾳频在⽂本中结束位置, //info为附加信息。
基于ANDROID系统的计步器软件的设计与制作
Activity 的生命周期图,如图 2-1 所示:
北京邮电大学世
图 2-1 Android Activity 生存周期图
北京邮电大学世
2.2.2 Android 界面 Activity 介绍 Android 的界面是由每一个成为 Activity 的 java 类组成的,这个类库是制作
Android 软件必须使用的。 WalkingActivity 是应用程序的用户界面,主要功能是 按照 XML 布局文件的内容显示界面并与用户进行交互。只有使用了这个才可以让用 户看得见,本类中有几个常用的覆写方法来表示界面的生存周期,分别是:
3.系统需求分析
3.1 可行性研究
可行性分析(Feasibility Analysis)也称为可行性研究,是在系统调查的基础 上,针对刚刚开发打算进一步应用的系统的必要性和可能性的分析和研究。可行性 研究的目的主要在于,用最小的代价在尽可能短的时间内确定问题是否能够解 决。
该阶段通过对系统总目标的初步调研与分析,提出可行性方案并进行论证。在 此,主要从经济可行性、技术可行性和操作可行性三方面进行分析。 3.1.1 经济可行性
本系统即通过 Eclipse,添加 Android 做插件,匹配上 AndroidSDK 进行软件的 开发。
2.1.1.3 JDK 简介 JDK(Java Development Kit)是一个写 Java 应用程序的程序开发环境。它由一个
处于操作系统层之上的运行环境还有开发者编译,调试和运行用 Java 语言写的 applet 和应用程序所需的工具组成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.1用户界面ﻩ16
5.2设置界面ﻩ17
5.3历史界面ﻩ20
5.4日历选择界面ﻩ21
5.5用户离开界面22
第六章系统测试与分析23
6.1测试过程ﻩ23
6.2测试分析ﻩ36
结论ﻩ36
参考文献37
第一章 绪论
1.1课题的背景及意义
当今社会,手机已经成为人们工作生活中必不可少的一项通讯和娱乐工具,随着手机的不断更新,手机的各种高层服务和应用层出不穷。现在智能手机可谓是爆发式增长,与此同时传统手机在不断地消失,诺基亚就是在这样的环境中受到了重创。现在主要有三个使用率和关注度最高的手机平台,分别是:Android,ios和windows phone平台,在这三个平台中Android的占有率最高。自2007年11月Google公司发布Android系统以来,短短几年时间,Android已经占据了智能手机市场的半壁江山,成为目前最为炙手可热的智能手机操作系统。Android走进了越来越多人的生活,成为他们获取信息的主境搭建ﻩ4
3.1 Android开发常用到的技术ﻩ4
3.1.1 Activity4
3.1.2 Service6
3.1.3 Content Provider内容提供者ﻩ6
3.1.4 Intent信使ﻩ6
3.2环境搭建6
3.2.1安装JDK6
3.2.2安装Eclipseﻩ7
3.2.3 Android SDK安装7
3.2.4 ADT安装7
第四章手机计步器的设计与实现8
4.1计步器功能的设计ﻩ8
4.2计步器功能的实现ﻩ10
4.2.1计步开始及暂停10
4.2.2复位键ﻩ11
4.2.3设置步长11
4.2.4设置体重11
4.2.5历史记录的查看及删除12
第五章计步器的界面效果16
SDK(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,AndroidSDK指的是Android专属的软件开发工具包。
2.2.3Eclipse开发工具介绍
Eclipse是一个开放源代码的、基于插件的可扩展性平台。也可以说它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一些标准的插件集,包括Java开发工具(JDK)。
3、退出系统功能:当用户想终止计步软件时,可以点击退出菜单后退出本系统。
4、历史记录功能:用户可以查看以往的历史记录。
5、保存功能:有户可以保存当天的运动量,以便之后查看。
2.1.2运行环境可行性分析
本软件是在windows 7操作系统中,利用Eclipse 开发工具搭载Android SDK工具包,结合Android手机自带的sqlite数据库进行开发。
根据本软件的功能需求,将本软件分为以下几个功能模块,如图 1-1所示:
图1-1 整体框架图
ﻬ第二章 系统分析
2.1 系统可行性分析
可行性分析(FeasibilityAnalysis)也称为可行性研究,是在系统调查的基础上,针对刚刚开发打算进一步应用的系统的必要性和可能性的分析和研究。可行性研究的目的主要在于,用最小的代价在尽可能短的时间内确定问题是否能够解决。[1]
同时目前搭载Android平台的应用有很多,但针对传感器而开发的应用市场上还不多见。本应用正是针对Android手机内置的加速度传感器而特别设计的应用。所以鉴于移动端应用开发是目前软件开发行业正在兴起并会越来越炙手可热的一个分支,并且针对传感器的开发相对空白我选择了研究此课题。
1.2系统框架
在设计一款软件时一般都会把它分成几个模块,在模块的基础上还会再分小模块,这样就达到了软件模块化设计的要求,然后再对各个小模块进行详细设计和编写,采用模块化的管理方式可以使软件结构更清晰,也使得软件的管理更有秩序,使别人容易理解和阅读,但是这些模块也要根据别的模块来设计和约束,不能随便设计脱离框架,设计完成后需要把每个设计完成的模块根据总体框架结合起来。
2.2开发环境简介
2.2.1JavaDevelopment kit(JDK)介绍
JDK是Java语言的软件开发工具包。本应用用的是JDK的J2ME版,它主要用于移动设备、嵌入式设备上的Java应用程序。没有JDK的话,无法编译Java程序,所以这是开发Java程序必须安装的工具。
2.2.2 AndroidSDK介绍
2.1.1功能可行性分析ﻩ3
2.1.2运行环境可行性分析3
2.2开发环境简介3
2.2.1Java Development kit(JDK)介绍ﻩ3
2.2.2 Android SDK介绍ﻩ3
2.2.3 Eclipse开发工具介绍4
2.2.4 Android Development Tools(ADT)介绍4
该阶段通过对系统总目标的初步调研与分析,提出可行性方案并进行论证。
2.1.1功能可行性分析
1、计步功能:根据用户设置的步长和体重,估算用户步行运动所消耗的热量。当距离发生改变时在前台界面上刷新用户步行的步数、距离、和消耗的卡路里;该计步功能还实现了Notification后台运行的功能。
2、设置参数功能:设置用户的步长、体重2个参数信息。通过设置体重可以估算出不同体重的人运动所消耗的卡路里量。
基于Android的手机计步器的设计与实现+源代码
———————————————————————————————— 作者:
———————————————————————————————— 日期:
ﻩ
专业工程综合实训设计报告
目 录
第一章绪论ﻩ1
1.1课题的背景及意义1
1.2系统框架1
第二章系统分析3
2.1系统可行性分析ﻩ3