基于android的手机防盗appdoc文档格式.docx
《基于android的手机防盗appdoc文档格式.docx》由会员分享,可在线阅读,更多相关《基于android的手机防盗appdoc文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![基于android的手机防盗appdoc文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/11/9757abd8-525f-4c32-9252-b14316a7f978/9757abd8-525f-4c32-9252-b14316a7f9781.gif)
xxx
专业(班级)
信息安全11-x
设计题目
基于android的手机防盗app
设
计
技
术
参
数
(1)开机自启动
(2)获得android手机SIM卡号
(3)读写隐藏文件
(4)用MD5对文件进行加解密
(5)手机gps的应用
要
求
(1)手机防盗:
根据sim的变更,
判断手机是否被盗。
(2)根据协议发送手中中sim卡的信息,和当前手机的位置经纬度,给安全号码发送信息。
(3)
快速进入手机防盗md5加密。
工
作
量
要求设计说明书的字数在3000字以上。
划
2014.11.18根据课程设计的要求,查找相关资料,完成需求分析;
2014.11.19-11.25进行系统的概要设计;
2014.11.26-12.14进行系统的详细设计和源代码的书写;
2014.12.15对系统进行调试分析,写出课程设计报告。
考
资
料
(1)《Android系统原理及开发要点详解》韩超,梁泉著电子工业出版社
(2)《Android应用开发揭秘》杨丰盛著机械工业出版社
(3)《android开发入门与实战》姚尚朗著人民邮电出版社
指导教师签字
教研室主任签字
年月日
指导教师评语:
成绩:
XXXX大学课程设计(论文)成绩评定表
1.问题描述1
1.1问题的意义1
1.1.实验目的1
2.需求分析1
3.概要设计2
3.1手机防盗app实现流程分析2
4.详细设计3
4.1开机自启动模块3
4.2读取sim卡卡号4
4.3获取手机持有者位置信息5
4.5实现MD5加解密7
4.6文件的隐藏8
5.调试分析9
5.1设计的思考9
5.2常见问题9
6.测试结果10
6.1开机自启动测试结果10
6.2获得手机持有者当前位置测试结果10
6.3获得当前sim卡信息测试结果11
6.4读写隐藏文件以及生产MD5值测试结果11
总结12
参考文献13
1.问题描述
1.1问题的意义
通过本次课程设计了解安卓应用开发的基本流程,学会安卓应用开发过程中基本组件的使用,同时掌握安卓应用中一些基本服务的开启以及权限的添加。
(1)加深对安卓应用开发的流程的理解。
(2)熟练掌握安卓应用开发中基本服务的开启及对应服务权限的添加。
(3)加深对MD5散发的理解与应用。
1.1.实验目的
(1)掌握安卓应用开发的流程。
(2)掌握安卓应用开发中基本服务的开启及对应服务权限的添加。
(3)对已学过的安卓应用开发技术有一个系统的理解。
2.需求分析
在现实生活中几乎每个人手中都有一部手机,然而手机的丢失却越来越成为问题。
面对这个问题大家都没有很好的解决办法,也只能在自身的条件下提高安全意识。
我们这次课程设计主要实现当手机丢失后尽最大可能的找回手机,这在很大程度上弥补了安全措施的不足,基于手机防盗的app市面上有很多但大部分都做得不尽完美,总存在着缺陷,希望我们的这个课程设计能给大家一个新的思路去开发手机防盗app。
3.概要设计
3.1手机防盗app实现流程分析
本软件实现开机自启动,然后自动测试sim卡卡号,并与之前的卡号对比,若相同不做任何处理,若不同则定时向安全号码发送信息,以确认sim卡变更是否为正常行为。
发送信息的内容包括当前sim卡卡号、手机持有者的位置(经度,纬度),持有者移动速度与方向。
这样可以在手机丢失后方便丢失者找回手机。
流程图如图3.1所示:
图3.1手机防盗流程图
4.详细设计
4.1开机自启动模块
当Android手机启动时,会发出一个系统广播,其中就有开机自启动的广播信息ACTION_BOOT_COMPLETED,它的字符串表示常量为android.intent.action.BOOT_COMPLETED。
所以只要在开始时程序中捕获这个广播消息就可以开机自启动了。
为了捕获这个消息需要实现一个BroadcastReceiver的子类,在这个类中的onReceive方法里实现activity或者service的启动,需要在AndroidManifest.xml注册并添加相应的权限,如下;
<
!
--向系统注册receiver-->
receiver
android:
name="
com.example.mobilesafety.MyBroadcastReceive"
>
<
intent-filter>
actionandroid:
android.intent.action.BOOT_COMPLETED"
/>
/intent-filter>
/receiver>
/application>
--添加权限-->
uses-permissionandroid:
name="
android.permission.RECEIVE_BOOT_COMPLETED"
具体实现源码如下:
publicclassMyBroadcastReceiveextendsBroadcastReceiver{
privatefinalStringACTION="
;
//定义捕获消息的内容
@Override
publicvoidonReceive(Contextcontext,Intentintent){
//TODOAuto-generatedmethodstub
if(intent.getAction().equals(ACTION));
//判断捕获的消息是//否为开机自启动消息,并启动SafetyMainActivity
{
Intentintent2=newIntent(context,SafetyMainActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
}
}
}
4.2读取sim卡卡号
手机号码不是所有的都能获取。
只是有一部分可以拿到。
这个是由于移动运营商没有把手机号码的数据写入到sim卡中。
SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。
所以我们读取的是IMSI好,需要在AndroidManifest.xml添加相应的权限,如下;
uses-permissionandroid:
android.permission.READ_PHONE_STATE"
具体过程实现如下;
privateTelephonyManagertManager;
//定义TelephonyManager的对象,//以获得手机设备信息
publicStringgetSimSerialNumber(){
tManager=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//获得系统中TelephonyService
Stringline=tManager.getSimSerialNumber();
//获取SIM卡卡号
returnline;
4.3获取手机持有者位置信息
GPS定位技术的主要功能是能够为终端用户提供高精度的位置信息。
移动运营商采用基于GPS定位技术的位置服务后,终端用户可以方便快捷地获知自己或他人当前所处的位置,这也为我们防盗提供了方便,在AndroidManifest.xml添加相应的权限,如下;
uses-permissionandroid:
android.permission.ACCESS_FINE_LOCATION"
>
/uses-permission>
具体实现过程如下;
publicclassGPSMainActivityextendsActivityimplementsLocationListener{
privateLocationManagerlocationManager;
privateLocationlocation;
privateStringprovider;
privateSimpleDateFormatsimpleDateFormat;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_gpsmain);
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//获得系统服务
simpleDateFormat=newSimpleDateFormat("
yy-mm-ddhh:
mm:
ss"
);
//使用Criteria确定androidlocationprovider
Criteriacriteria=newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//设置为最大精度
criteria.setAltitudeRequired(false);
//不要求海拔信息
criteria.setBearingRequired(false);
//不要求方位信息
criteria.setCostAllowed(true);
//是否允许付费
criteria.setPowerRequirement(Criteria.POWER_LOW);
//对电量的要求
criteria.setAccuracy(Criteria.ACCURACY_FINE);
provider=locationManager.getBestProvider(criteria,true);
location=locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);
locationManager.requestLocationUpdates(provider,2000,10,this);
privatevoidupdateWithNewLocation(Locationlocation2){
StringlatLongSt