WHUT能力拓展课设参考android手机的剩余电量显示.docx
《WHUT能力拓展课设参考android手机的剩余电量显示.docx》由会员分享,可在线阅读,更多相关《WHUT能力拓展课设参考android手机的剩余电量显示.docx(15页珍藏版)》请在冰豆网上搜索。
WHUT能力拓展课设参考android手机的剩余电量显示
学号:
课程设计报告
题目
基于Android的自动显示剩余电量
学院
计算机科学与技术学院
专业
物联网工程
班级
姓名
指导教师
2013
年
06
月
21
日
一、背景知识
1、Android平台简介
Android是Google于2007年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
它采用软件堆层(SoftwareStack,又名软件叠层)的架构,主要分为三部分。
底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机VirtualMachine,由C++开发。
最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。
不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。
2、功能实现
本设计旨在为使用基于Android操作系统的移动设备(如手机、平板电脑等)的用户提供一种准确、方便的自动显示剩余变量的系统。
软件的开发使用Java语言android开发包和Eclipse开发环境。
二、环境配置
1、下载相关软件表
软件名称
对应下载网址
JDK6.0
Eclipse3.3
http:
//www.eclipse.org/downloads/
AndroidSDK
2、安装软件和配置环境
(1)安装JDK
下载好JDK是一个可执行安装程序,双击安装。
假设安装路径为C:
/ProgramFiles/Java/jdk1.6.0_05(当然其他路径也可以)。
JDK安装完成之后要设置系统环境变量:
我的电脑点右键,选择“属性”,选择“高级”标签,进入环境变量设置。
环境变量设置,分别设置三个环境变量:
JAVA_HOME、path变量、classpath变量。
①设置JAVA_HOME
在系统环境变量那一栏中,点“新建”JAVA_HOME(JAVA_HOME指向的是JDK的安装路径)。
变量名:
JAVA_HOME;变量值:
C:
/ProgramFiles/Java/jdk1.6.0_05。
设置JAVA_HOME量的目的
Ⅰ、为了方便引用,比如JDK安装C:
/ProgramFiles/Java/jdk1.6.0_05目录里,则设置JAVA_HOME为该目录路径,那么以后要使用这个路径的时候,只需输入%JAVA_HOME%即可,避免每次引用都输入很长的路径串。
Ⅱ、归一原则。
当JDK路径改变的时候,仅需更改JAVA_HOME的变量值即可。
否则,就要更改任何用绝对路径引用JDK目录的文档,没有改全则某个程序找不到JDK,后果将导致系统崩溃。
Ⅲ、第三方软件会引用约定好的JAVA_HOME变量,否则不能正常使用该软件。
②设置path变量
在系统变量里找到path变量,选择“编辑”变量名:
path,变量值:
%JAVA_HOME%/bin。
设置path变量的目的:
使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah等,这就要找到我们安装JDK的目录,比如我们的JDK安装在C:
/ProgramFiles/Java/jdk1.6.0_05目录下,那么在C:
/ProgramFiles/Java/jdk1.6.0_05/bin目录下就是我们常用的java应用程序,我们就需要把C:
/jdk1.6.0/bin这个目录加到path环境变量里面。
③设置classpath环境
在系统环境变量那一栏中点“新建”classpath。
变量名:
classpath,变量值:
.;%JAVA_HOME%/lib/;%JAVA_HOME%/jre/lib/(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行javaAClass的时候,系统就会先在当前目录寻找AClass文件了)。
(2)安装Eclipse
将下载的Eclipse3.3压缩包解压到相应的安装目录即可。
(3)配置Android环境
为了让开发过程更轻松,Google还编写了一款ADT的Eclipse插件。
要想安装该插件,请执行以下步骤:
①启动Eclipse,然后选择Help>SoftwareUpdates。
②单击AvailableSoftware选项卡。
③单击AddSite按钮。
④输入Android更新站点的位置:
https:
//dl-
⑤现在,该Android站点应该出现在AvailableSoftware视图中。
选中该站点旁边的复选框,然后单击Install。
如果出现错误信息,原因可能是Eclipse的版本不对。
⑥单击Finish开始下载安装过程。
⑦安装完成后,重新启动Eclipse。
⑧Eclipse启动后可能出现几条错误信息,因为此时需要告诉你AndroidSDK位于何处。
选择Window>Preferences>Android,然后输入你在前面记下的SDK安装目录。
单击OK按钮。
三、需求分析
在移动设备的使用过程中,我们最担心的是移动设备没电而影响业务,所以及时显示电池容量功能变得越发重要了。
我们可以使用AndroidAPI里面的BroadcastReseiver类和Button的Listener类,当Reseiver被注册后会在后台等待被其他程序调用。
当指定要捕捉的Action发生时,Reseiver就会被调用,并运行onReseiver来实现里面的程序。
在本例中,将利用BroadcastReseiver的特性来获取手机电池的容量。
通过注册BroadcastReseiver时设置的IntentFilter来获取系统发出的Intent.ACTION_BATTERY_CHANGED,然后以此来获取电池容量。
四、功能设计
1、导入需要的类库,一些已经编译过的class文件
packageirdc.dian;
/*import相关class*/
importirdc.dian.R;
importandroid.app.Activity;
importandroid.app.Dialog;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.Button;
importandroid.widget.TextView;
2、编写布局文件main.xml。
xmlversion="1.0"encoding="utf-8"?
>
xmlns:
android="
android:
id="@+id/layout1"
android:
background="@drawable/white"
android:
layout_width"fill_parent"
android:
layout_height"fill_parent"
>
android:
id="@+id/myTextView1"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
textColor="@drawable/blue"
android:
textSize="20sp"
android:
text="@string/str_title"
android:
layout_x="60px"
android:
layout_y="40px"
>
3、编写主程序文件是dian.java。
(1)声明3个变量intLevel、intScale和mButton01,然后创建BroadcastReseiver,如果捕捉到的action是ACTION_BATTERY_CHANGED,则运行onBatteryInfoReceiver()。
publicclassdianextendsActivity
{
/*变量声明*/
privateintintLevel;
privateintintScale;
privateButtonmButton01;
/*创建BroadcastReceiver*/
PrivateBroadcastReceivermBatInfoReceiver=newBroadcastReceiver()
{
publicvoidonReceive(Contextcontext,Intentintent)
{
Stringaction=intent.getAction();
/*如果捕捉到的action是ACTION_BATTERY_CHANGED,
*就运行onBatteryInfoReceiver()*/
if(Intent.ACTION_BATTERY_CHANGED.equals(action))
{
intLevel=intent.getIntExtra("level",0);
intScale=intent.getIntExtra("scale",100);
onBatteryInfoReceiver(intLevel,intScale);
}
}
};
(2)在onCreate中载入主布局文件main.xml,然后初始化Button和设置点击后的动作,并注册一个系统BroadcastReseiver,用于访问电池计量。
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
/*载入main.xmlLayout*/
setContentView(R.layout.main);
/*初始化Button,并设置点击后的动作*/
mButton01=(Button)findViewById(R.id.myButton1);
mButton01.setOnClickListener(newButton.OnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
/*注册一个系统BroadcastReceiver,作为访问电池计量之用*/
registerReceiver
(
mBatInfoReceiver,
newIntentFilter(Intent.ACTION_BATTERY_CHANGED)
);
}
});
}
(3)定义onBatteryInfoReceiver,当捕捉到ACTION_BATTERY_CHANGED时要运行的method,首先创建一个背景模糊的Window,且将对话窗口放在前景,然后将取得的电池计量显示与Dialog中,最后设置返回主画面的按钮。
/*捕捉到ACTION_BATTERY_CHANGED时要运行的method*/
publicvoidonBatteryInfoReceiver(intintLevel,intintScale)
{
/*create跳出的对话窗口*/
finalDialogd=newDialog(dian.this);
d.setTitle(R.string.str_dialog_title);
d.setContentView(R.layout.mydialog);
/*创建一个背景模糊的Window,且将对话窗口放在前景*/
Windowwindow=d.getWindow();
window.setFlags
(
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND
);
/*将取得的电池计量显示于Dialog中*/
TextViewmTextView02=(TextView)d.findViewById(R.id.myTextView2);
mTextView02.setText
(
getResources().getText(R.string.str_dialog_body)+
String.valueOf(intLevel*100/intScale)+"%"
);
/*设置返回主画面的按钮*/
ButtonmButton02=(Button)d.findViewById(R.id.myButton2);
mButton02.setOnClickListener(newButton.OnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
/*反注册Receiver,并关闭对话窗口*/
unregisterReceiver(mBatInfoReceiver);
d.dismiss();
}
});
d.show();
}
}
五、运行结果
六、课程设计总结
通过此次课程设计,我学习了有关基于Android环境开发方面的知识。
在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我掌握的知识不再是纸上谈兵。
在课程设计过程中,我不断发现新问题,不断改正,不断领悟,不断获取。
最终的调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在同学的帮助和自己的学习下,终于游逆而解。
在今后的学习实践过程中,我一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事。
这次课程设计是一次能力拓展训练,是我的很多专业知识以及专业技能上的提升,同时又是一门思考课和专业课,给了我许多新问题,给了我很多思考的机会。
同时,课程设计让我感触很深。
使我对抽象的理论有了具体的认识。
通过这次课程设计,我学会了搭建Android开发环境,并对其有了初步的了解;对Java语言有了初步的了解,也深感Java语言的强大,决定好好学习一下。
这次课程设计,不仅培养了我独立思考、动手操作的能力,而且在各种其它能力上也都有了提高。
更重要的是,在课程设计过程上,我们学会了很多学习的方法,这是日后最实用的,真的是受益匪浅。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能学有所用。
七、参考文献
1、《Java从精通到入门》,魔乐科技(MLDN)软件实训中心编著,人民邮电出版社。
2、《Android开发从入门到精通》,扶松柏编著,北京希望电子出版社。
3、《Android编程入门经典》,[美]Wei-MengLee编著,何晨光、李洪刚译,清华大学出版社。
八、附录:
源程序
packageirdc.dian;
/*import相关class*/
importirdc.dian.R;
importandroid.app.Activity;
importandroid.app.Dialog;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.Button;
importandroid.widget.TextView;
publicclassdianextendsActivity
{
/*变量声明*/
privateintintLevel;
privateintintScale;
privateButtonmButton01;
/*创建BroadcastReceiver*/
privateBroadcastReceivermBatInfoReceiver=newBroadcastReceiver()
{
publicvoidonReceive(Contextcontext,Intentintent)
{
Stringaction=intent.getAction();
/*如果捕捉到的action是ACTION_BATTERY_CHANGED,
*就运行onBatteryInfoReceiver()*/
if(Intent.ACTION_BATTERY_CHANGED.equals(action))
{
intLevel=intent.getIntExtra("level",0);
intScale=intent.getIntExtra("scale",100);
onBatteryInfoReceiver(intLevel,intScale);
}
}
};
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
/*载入main.xmlLayout*/
setContentView(R.layout.main);
/*初始化Button,并设置点击后的动作*/
mButton01=(Button)findViewById(R.id.myButton1);
mButton01.setOnClickListener(newButton.OnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
/*注册一个系统BroadcastReceiver,作为访问电池计量之用*/
registerReceiver
(
mBatInfoReceiver,
newIntentFilter(Intent.ACTION_BATTERY_CHANGED)
);
}
});
}
/*捕捉到ACTION_BATTERY_CHANGED时要运行的method*/
publicvoidonBatteryInfoReceiver(intintLevel,intintScale)
{
/*create跳出的对话窗口*/
finalDialogd=newDialog(dian.this);
d.setTitle(R.string.str_dialog_title);
d.setContentView(R.layout.mydialog);
/*创建一个背景模糊的Window,且将对话窗口放在前景*/
Windowwindow=d.getWindow();
window.setFlags
(
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND
);
/*将取得的电池计量显示于Dialog中*/
TextViewmTextView02=(TextView)d.findViewById(R.id.myTextView2);
mTextView02.setText
(
getResources().getText(R.string.str_dialog_body)+
String.valueOf(intLevel*100/intScale)+"%"
);
/*设置返回主画面的按钮*/
ButtonmButton02=(Button)d.findViewById(R.id.myButton2);