Android课程设计.docx
《Android课程设计.docx》由会员分享,可在线阅读,更多相关《Android课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
Android课程设计
吉首大学信息科学与工程学院
课程设计报告书
课程
课题:
基于Android的手机安全卫士
姓名:
学号:
专业:
网络工程
年级:
2012级
指导教师:
2016年6月
一、项目介绍与设计目的
1.1课程设计目的
(1)掌握Android编程环境的安装。
(2)学会使用模拟器模拟手机环境。
(3)掌握Android的APP开发过程。
(4)掌握Android能够实现的功能。
(5)掌握手机安全卫士APP功能设计。
1.2课程设计要求
(1)开发出一款手机安全卫士APP。
(2)能够实现文件管理功能。
(3)能够实现对手机安全保护。
(4)实现电话安全管理。
1.3课程设计内容
(1)Android开发环境搭建与配置。
(2)手机安全卫士功能设计。
(3)代码编写。
(4)测试与调试。
1.4课程设计意义
通过课程设计,我们学习到了Android开发的流程和简单的APP开发经历,并初步打好编程基础。
根据这次课程设计的经历,我们可以更快,更有方向的进行更深入的学习。
这次课题是基于安卓手机安全卫士开发一款手机应用软件,对于手机安全软件的功能实现有了更准确的认识,能够感受到当前手机
数据保护对于用户来说是一个多么重要的事情。
我们要实现对手机端的安全保护是刻不容缓的事情,继续探索安全保护方法是我们接下来要继续努力完成的任务。
二、设计方案
1.格式布局
1.1下面是本次课程设计规划的logo登陆界面(如图1):
图1Logo界面
1.2下面是本次课程设计规划的功能界面(如图2):
图2功能界面
2.功能设计内容
2.1SIM卡信息
功能介绍:
此功能可以获取手机网络、SIM卡相关信息。
(如图3)根据SIM卡设备当前位置信息,通过可以查询到本机所在地的位置。
(如图4)
图3SIM卡信息
图4基站查询结果
2.2通讯卫士
该功能可以对手机通话状态进行监听。
(如图5)当手机来电铃声想起时,程序会把来电号码记录到文件中。
这个文件保存在手机数据库里的data/data/org.crazyit.manager/files目录下的phoneList文件中。
将文件导入到电脑中可以查看该文件内容。
(如图6)
图5通讯卫士
图6phoneList文件内容
2.3文件管理
查看系统文件夹和文件,SD卡文件夹和文件(如图7)。
图7文件管理
2.4发送短信
在收件人号码输入框内输入收信人的电话号码,在短信内容内输入内容后就可以发送短信了。
(如图8)
图8发送短信
3.主要代码实现
3.1SIM卡信息模块
publicclassTelephonyStatusextendsActivity
{
ListViewshowView;
//声明代表状态名的数组
String[]statusNames;
//声明代表手机状态的集合
ArrayListstatusValues=newArrayList();
@Override
publicvoidonCreate(BundlesavedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.sim_main);
//获取系统的TelephonyManager对象
TelephonyManagertManager=(TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
//获取各种状态名称的数组
statusNames=getResources().getStringArray(R.array.statusNames);
//获取代表SIM卡状态的数组
String[]simState=getResources()
.getStringArray(R.array.simState);
//获取代表电话网络类型的数组
String[]phoneType=getResources().getStringArray(
R.array.phoneType);
//获取设备编号
statusValues.add(tManager.getDeviceId());
//获取系统平台的版本
statusValues.add(tManager.getDeviceSoftwareVersion()
!
=null?
tManager.getDeviceSoftwareVersion():
"未知");
//获取网络运营商代号
statusValues.add(tManager.getNetworkOperator());
//获取网络运营商名称
statusValues.add(tManager.getNetworkOperatorName());
//获取手机网络类型
statusValues.add(phoneType[tManager.getPhoneType()]);
//获取设备所在位置
statusValues.add(tManager.getCellLocation()!
tManager
.getCellLocation().toString():
"未知位置");
//获取SIM卡的国别
statusValues.add(tManager.getSimCountryIso());
//获取SIM卡序列号
statusValues.add(tManager.getSimSerialNumber());
//获取SIM卡状态
statusValues.add(simState[tManager.getSimState()]);
//获得ListView对象
showView=(ListView)findViewById(R.id.show);
ArrayList>status=
newArrayList>();
//遍历statusValues集合,将statusNames、statusValues
//的数据封装到List>集合中
for(inti=0;i{HashMapmap=newHashMap();map.put("name",statusNames[i]);map.put("value",statusValues.get(i));status.add(map);}//使用SimpleAdapter封装List数据SimpleAdapteradapter=newSimpleAdapter(this,status,R.layout.line,newString[]{"name","value"}newint[]{R.id.name,R.id.value});//为ListView设置AdaptershowView.setAdapter(adapter);}}3.2通讯卫士模块publicclassMonitorPhoneextendsActivity{TelephonyManagertManager;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.phone_main);//取得TelephonyManager对象tManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//创建一个通话状态监听器PhoneStateListenerlistener=newPhoneStateListener(){@OverridepublicvoidonCallStateChanged(intstate,Stringnumber){switch(state){//无任何状态caseTelephonyManager.CALL_STATE_IDLE:break;caseTelephonyManager.CALL_STATE_OFFHOOK:break;//来电铃响时caseTelephonyManager.CALL_STATE_RINGING:OutputStreamos=null;try{os=open("phoneList",MODE_APPEND);}catch(e){e.printStackTrace();}PrintStreamps=newPrintStream(os);//将来电号码记录到文件中ps.println(newDate()+"来电:"+number);ps.close();break;default:break;}super.onCallStateChanged(state,number);}};//监听电话通话状态的改变tManager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);}}3.3文件管理模块publicclassextendsActivity{private;TabListenerlistener=newTabListener(){@OverridepublicvoidonTabUnselected(Tabtab,FragmentTransactionft){}//标签被选中的时候触发这个方法@OverridepublicvoidonTabSelected(Tabtab,FragmentTransactionft){intposition=tab.getPosition();//标签的索引//tab.getText().toString();//标签的文本标题switch(position){case0:try{.getFiles(0);}catch(Exceptione){e.printStackTrace();}break;case1:try{.getFiles(1);}catch(Exceptione){e.printStackTrace();}break;case2://弹出窗口,让用户输入新建文件夹的名称break;case3://粘贴逻辑break;}}@OverridepublicvoidonTabReselected(Tabtab,FragmentTransactionft){}};privatestaticfinalintITEM_CREATE=1;privatestaticfinalintITEM_COPY=2;privatestaticfinalintITEM_PAST=3;privatestaticfinalintITEM_DELETE=4;privateDataServiceservice;privateActionBarbar;privateListViewlistView;privateTextViewpathView;privateButtonbutton;privateList<>list;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_);listView=(ListView)findViewById(R.id.listView);pathView=(TextView)findViewById(R.id.currentPath);service=newDataService();button=(Button)findViewById(R.id.button);=new();try{initListView("/");}catch(Exceptione){e.printStackTrace();}initActionBar();initEvents();}privatevoidinitEvents(){//给每一个Item添加点击事件listView.setOnItemClickListener(listener1);//界面上每一个视图组件都可以使用上下文菜单registerForContextMenu(listView);}@OverridepublicvoidonCreateContextMenu(android.view.ContextMenumenu,Viewv,android.view.ContextMenu.ContextMenuInfomenuInfo){menu.add(1,ITEM_CREATE,0,"新建");menu.add(1,ITEM_COPY,1,"复制");menu.add(1,ITEM_PAST,2,"粘贴");menu.add(1,ITEM_DELETE,2,"删除");};@OverridepublicbooleanonContextItemSelected(MenuItemitem){//触发上下文菜单的组件AdapterContextMenuInfoinfo=(AdapterContextMenuInfo)item.getMenuInfo();intposition=info.position;intitemId=item.getItemId();switch(itemId){caseITEM_CREATE:button.setEnabled(true);break;caseITEM_COPY:button.setEnabled(true);break;caseITEM_PAST:button.setEnabled(true);break;caseITEM_DELETE:booleanflag=doubleCheck();break;}returntrue;}privatebooleandoubleCheck(){finalResultres=newResult(false);Builderbuilder=newBuilder(this);builder.setTitle("警告");builder.setMessage("你确定删除吗?");builder.setPositiveButton("确认",newOnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){//匿名内部类在使用外部作用域的变量的时候,不能修改这个变量res.setFlag(true);}});builder.setNegativeButton("取消",null);returnres.isFlag();}publicvoidpast(Viewv){button.setEnabled(true);}privateOnItemClickListenerlistener1=newOnItemClickListener(){publicvoidonItemClick(android.widget.AdapterView>parent,Viewview,intposition,longid){com.jsu.mobilesafe.bean.item=list.get(position);Stringpath=item.get();try{initListView(path);}catch(Exceptione){e.printStackTrace();}};};privatevoidinitListView(Stringpath)throwsException{list=service.getFiles(path);MyAdapteradapter=newMyAdapter(this,R.layout.list_item,list);//绑定适配器listView.setAdapter(adapter);pathView.setText(path);}privatevoidinitActionBar(){bar=getActionBar();bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);for(inti=0;iaddTab(Constants.TABS_TITLE[i]);}}privatevoidaddTab(Stringtitle){Tabtab=bar.newTab();tab.setText(title);tab.setTabListener(listener);bar.addTab(tab);}}3.4发送短信模块publicclassSendSmsextendsActivity{EditTextnumber,content;Buttonsend;SmsManagersManager;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.sendsms_main);//获取SmsManagersManager=SmsManager.getDefault();//获取程序界面上的两个文本框和按钮number=(EditText)findViewById(R.id.number);content=(EditText)findViewById(R.id.content);send=(Button)findViewById(R.id.send);//为send按钮的单击事件绑定监听器send.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//创建一个PendingIntent对象PendingIntentpi=PendingIntent.getActivity(SendSms.this,0,newIntent(),0);//发送短信sManager.sendTextMessage(number.getText().toString(),null,content.getText().toString(),pi,null);//提示短信发送完成Toast.makeText(SendSms.this,"短信发送完成",8000).show();}});}} 三、总结和分析本次课程设计,经过一周时间的指导学习,我们设计出了课程设计Android作品,并成功答辩通过。我们的课程设计功能按照课程设计的要求基本实现,并有新颖的可以查询到手机的当前所在位置信息的功能,可以记录手机用户的通话记录,用户在手机里是无法查看到此系统文件,实现了保密的效果。还能够实现手机的发送短信的常规功能。此次课程设计提高了我们的动手能力,增强了我们的开发经验,为以后的学习提供了很大的帮助。希望我们能够接着再接再厉
HashMapmap=newHashMap();
map.put("name",statusNames[i]);
map.put("value",statusValues.get(i));
status.add(map);
}
//使用SimpleAdapter封装List数据
SimpleAdapteradapter=newSimpleAdapter(this,status,
R.layout.line,newString[]{"name","value"}
newint[]{R.id.name,R.id.value});
//为ListView设置Adapter
showView.setAdapter(adapter);
3.2通讯卫士模块
publicclassMonitorPhoneextendsActivity
TelephonyManagertManager;
setContentView(R.layout.phone_main);
//取得TelephonyManager对象
tManager=(TelephonyManager)
//创建一个通话状态监听器
PhoneStateListenerlistener=newPhoneStateListener()
publicvoidonCallStateChanged(intstate,Stringnumber)
switch(state)
//无任何状态
caseTelephonyManager.CALL_STATE_IDLE:
break;
caseTelephonyManager.CALL_STATE_OFFHOOK:
//来电铃响时
caseTelephonyManager.CALL_STATE_RINGING:
OutputStreamos=null;
try
os=open("phoneList",MODE_APPEND);
catch(e)
e.printStackTrace();
PrintStreamps=newPrintStream(os);
//将来电号码记录到文件中
ps.println(newDate()+"来电:
"+number);
ps.close();
default:
super.onCallStateChanged(state,number);
};
//监听电话通话状态的改变
tManager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
3.3文件管理模块
publicclassextendsActivity{
private;
TabListenerlistener=newTabListener(){
publicvoidonTabUnselected(Tabtab,FragmentTransactionft){
//标签被选中的时候触发这个方法
publicvoidonTabSelected(Tabtab,FragmentTransactionft){
intposition=tab.getPosition();//标签的索引
//tab.getText().toString();//标签的文本标题
switch(position){
case0:
try{
.getFiles(0);
}catch(Exceptione){
case1:
.getFiles
(1);
case2:
//弹出窗口,让用户输入新建文件夹的名称
case3:
//粘贴逻辑
publicvoidonTabReselected(Tabtab,FragmentTransactionft){
privatestaticfinalintITEM_CREATE=1;
privatestaticfinalintITEM_COPY=2;
privatestaticfinalintITEM_PAST=3;
privatestaticfinalintITEM_DELETE=4;
privateDataServiceservice;
privateActionBarbar;
privateListViewlistView;
privateTextViewpathView;
privateButtonbutton;
privateList<>list;
protectedvoidonCreate(BundlesavedInstanceState){
setContentView(R.layout.activity_);
listView=(ListView)findViewById(R.id.listView);
pathView=(TextView)findViewById(R.id.currentPath);
service=newDataService();
button=(Button)findViewById(R.id.button);
=new();
initListView("/");
initActionBar();
initEvents();
privatevoidinitEvents(){
//给每一个Item添加点击事件
listView.setOnItemClickListener(listener1);
//界面上每一个视图组件都可以使用上下文菜单
registerForContextMenu(listView);
publicvoidonCreateContextMenu(android.view.ContextMenumenu,Viewv,android.view.ContextMenu.ContextMenuInfomenuInfo){
menu.add(1,ITEM_CREATE,0,"新建");
menu.add(1,ITEM_COPY,1,"复制");
menu.add(1,ITEM_PAST,2,"粘贴");
menu.add(1,ITEM_DELETE,2,"删除");
publicbooleanonContextItemSelected(MenuItemitem){
//触发上下文菜单的组件
AdapterContextMenuInfoinfo=(AdapterContextMenuInfo)item.getMenuInfo();
intposition=info.position;
intitemId=item.getItemId();
switch(itemId){
caseITEM_CREATE:
button.setEnabled(true);
caseITEM_COPY:
caseITEM_PAST:
caseITEM_DELETE:
booleanflag=doubleCheck();
returntrue;
privatebooleandoubleCheck(){
finalResultres=newResult(false);
Builderbuilder=newBuilder(this);
builder.setTitle("警告");
builder.setMessage("你确定删除吗?
");
builder.setPositiveButton("确认",newOnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhich){
//匿名内部类在使用外部作用域的变量的时候,不能修改这个变量
res.setFlag(true);
});
builder.setNegativeButton("取消",null);
returnres.isFlag();
publicvoidpast(Viewv){
privateOnItemClickListenerlistener1=newOnItemClickListener(){
publicvoidonItemClick(android.widget.AdapterView
>parent,Viewview,intposition,longid){
com.jsu.mobilesafe.bean.item=list.get(position);
Stringpath=item.get();
initListView(path);
privatevoidinitListView(Stringpath)throwsException{
list=service.getFiles(path);
MyAdapteradapter=newMyAdapter(this,R.layout.list_item,list);
//绑定适配器
listView.setAdapter(adapter);
pathView.setText(path);
privatevoidinitActionBar(){
bar=getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for(inti=0;iaddTab(Constants.TABS_TITLE[i]);}}privatevoidaddTab(Stringtitle){Tabtab=bar.newTab();tab.setText(title);tab.setTabListener(listener);bar.addTab(tab);}}3.4发送短信模块publicclassSendSmsextendsActivity{EditTextnumber,content;Buttonsend;SmsManagersManager;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.sendsms_main);//获取SmsManagersManager=SmsManager.getDefault();//获取程序界面上的两个文本框和按钮number=(EditText)findViewById(R.id.number);content=(EditText)findViewById(R.id.content);send=(Button)findViewById(R.id.send);//为send按钮的单击事件绑定监听器send.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){//创建一个PendingIntent对象PendingIntentpi=PendingIntent.getActivity(SendSms.this,0,newIntent(),0);//发送短信sManager.sendTextMessage(number.getText().toString(),null,content.getText().toString(),pi,null);//提示短信发送完成Toast.makeText(SendSms.this,"短信发送完成",8000).show();}});}} 三、总结和分析本次课程设计,经过一周时间的指导学习,我们设计出了课程设计Android作品,并成功答辩通过。我们的课程设计功能按照课程设计的要求基本实现,并有新颖的可以查询到手机的当前所在位置信息的功能,可以记录手机用户的通话记录,用户在手机里是无法查看到此系统文件,实现了保密的效果。还能够实现手机的发送短信的常规功能。此次课程设计提高了我们的动手能力,增强了我们的开发经验,为以后的学习提供了很大的帮助。希望我们能够接着再接再厉
addTab(Constants.TABS_TITLE[i]);
privatevoidaddTab(Stringtitle){
Tabtab=bar.newTab();
tab.setText(title);
tab.setTabListener(listener);
bar.addTab(tab);
3.4发送短信模块
publicclassSendSmsextendsActivity
EditTextnumber,content;
Buttonsend;
SmsManagersManager;
setContentView(R.layout.sendsms_main);
//获取SmsManager
sManager=SmsManager.getDefault();
//获取程序界面上的两个文本框和按钮
number=(EditText)findViewById(R.id.number);
content=(EditText)findViewById(R.id.content);
send=(Button)findViewById(R.id.send);
//为send按钮的单击事件绑定监听器
send.setOnClickListener(newOnClickListener()
publicvoidonClick(Viewarg0)
//创建一个PendingIntent对象
PendingIntentpi=PendingIntent.getActivity(
SendSms.this,0,newIntent(),0);
//发送短信
sManager.sendTextMessage(number.getText().toString(),
null,content.getText().toString(),pi,null);
//提示短信发送完成
Toast.makeText(SendSms.this,"短信发送完成",8000).show();
三、总结和分析
本次课程设计,经过一周时间的指导学习,我们设计出了课程设计Android作品,并成功答辩通过。
我们的课程设计功能按照课程设计的要求基本实现,并有新颖的可以查询到手机的当前所在位置信息的功能,可以记录手机用户的通话记录,用户在手机里是无法查看到此系统文件,实现了保密的效果。
还能够实现手机的发送短信的常规功能。
此次课程设计提高了我们的动手能力,增强了我们的开发经验,为以后的学习提供了很大的帮助。
希望我们能够接着再接再厉
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1