1、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
2、)Android开发环境搭建与配置。(2)手机安全卫士功能设计。(3)代码编写。(4)测试与调试。1.4课程设计意义通过课程设计,我们学习到了Android开发的流程和简单的APP开发经历,并初步打好编程基础。根据这次课程设计的经历,我们可以更快,更有方向的进行更深入的学习。这次课题是基于安卓手机安全卫士开发一款手机应用软件,对于手机安全软件的功能实现有了更准确的认识,能够感受到当前手机数据保护对于用户来说是一个多么重要的事情。我们要实现对手机端的安全保护是刻不容缓的事情,继续探索安全保护方法是我们接下来要继续努力完成的任务。二、设计方案1格式布局1.1 下面是本次课程设计规划的logo登陆界
3、面(如图1):图1 Logo界面1.2 下面是本次课程设计规划的功能界面(如图2):图2功能界面2功能设计内容2.1 SIM卡信息功能介绍:此功能可以获取手机网络、SIM卡相关信息。(如图3)根据SIM卡设备当前位置信息,通过可以查询到本机所在地的位置。(如图4)图3 SIM卡信息图4 基站查询结果2.2 通讯卫士功能介绍:该功能可以对手机通话状态进行监听。(如图5)当手机来电铃声想起时,程序会把来电号码记录到文件中。这个文件保存在手机数据库里的data/data/org.crazyit.manager/files目录下的phoneList文件中。将文件导入到电脑中可以查看该文件内容。(如图6
4、)图5 通讯卫士图6 phoneList文件内容2.3文件管理功能介绍:查看系统文件夹和文件,SD卡文件夹和文件(如图7)。图7 文件管理2.4发送短信功能介绍:在收件人号码输入框内输入收信人的电话号码,在短信内容内输入内容后就可以发送短信了。(如图8)图8 发送短信3. 主要代码实现3.1 SIM卡信息模块public class TelephonyStatus extends Activity ListView showView; / 声明代表状态名的数组 String statusNames; / 声明代表手机状态的集合 ArrayList statusValues = new Arra
5、yList(); Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.sim_main); / 获取系统的TelephonyManager对象 TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); / 获取各种状态名称的数组 statusNames = getResources().ge
6、tStringArray(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.getDevi
7、ceSoftwareVersion() != null ? tManager.getDeviceSoftwareVersion() : 未知); / 获取网络运营商代号 statusValues.add(tManager.getNetworkOperator(); / 获取网络运营商名称 statusValues.add(tManager.getNetworkOperatorName(); / 获取手机网络类型 statusValues.add(phoneTypetManager.getPhoneType(); / 获取设备所在位置 statusValues.add(tManager.getC
8、ellLocation() != null ? tManager .getCellLocation().toString() : 未知位置); / 获取SIM卡的国别 statusValues.add(tManager.getSimCountryIso(); / 获取SIM卡序列号 statusValues.add(tManager.getSimSerialNumber(); / 获取SIM卡状态 statusValues.add(simStatetManager.getSimState(); / 获得ListView对象 showView = (ListView) findViewById(
9、R.id.show); ArrayListMap status = new ArrayListMap(); / 遍历statusValues集合,将statusNames、statusValues / 的数据封装到ListMap集合中 for (int i = 0; i statusValues.size(); i+) HashMap map = new HashMap(); map.put(name, statusNamesi); map.put(value, statusValues.get(i); status.add(map); / 使用SimpleAdapter封装List数据 Si
10、mpleAdapter adapter = new SimpleAdapter(this, status, R.layout.line, new String name, value , new int R.id.name, R.id.value ); / 为ListView设置Adapter showView.setAdapter(adapter); 3.2 通讯卫士模块public class MonitorPhone extends Activity TelephonyManager tManager; Override public void onCreate(Bundle saved
11、InstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.phone_main); / 取得TelephonyManager对象 tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); / 创建一个通话状态监听器 PhoneStateListener listener = new PhoneStateListener() Override public void onCallStateChanged(int s
12、tate, String number) switch (state) / 无任何状态 case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: break; / 来电铃响时 case TelephonyManager.CALL_STATE_RINGING: OutputStream os = null; try os = openFileOutput(phoneList, MODE_APPEND); catch (FileNotFoundException e) e.prin
13、tStackTrace(); PrintStream ps = new PrintStream(os); / 将来电号码记录到文件中 ps.println(new Date() + 来电: + number); ps.close(); break; default: break; super.onCallStateChanged(state, number); ; / 监听电话通话状态的改变 tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 3.3文件管理模块public class FileManagerActi
14、vity extends Activity private FileService fileService; TabListener listener = new TabListener() Override public void onTabUnselected(Tab tab, FragmentTransaction ft) /标签被选中的时候触发这个方法 Override public void onTabSelected(Tab tab, FragmentTransaction ft) int position = tab.getPosition();/标签的索引 / tab.getT
15、ext().toString();/标签的文本标题 switch (position) case 0: try fileService.getFiles(0); catch (Exception e) e.printStackTrace(); break; case 1: try fileService.getFiles(1); catch (Exception e) e.printStackTrace(); break; case 2: /弹出窗口,让用户输入新建文件夹的名称 break; case 3: /粘贴逻辑 break; Override public void onTabRese
16、lected(Tab tab, FragmentTransaction ft) ; private static final int ITEM_CREATE = 1; private static final int ITEM_COPY = 2; private static final int ITEM_PAST = 3; private static final int ITEM_DELETE= 4; private DataService service; private ActionBar bar; private ListView listView; private TextView
17、 pathView; private Button button; private List list; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_file_manager); listView = (ListView) findViewById(R.id.listView); pathView = (TextView) findViewById(R.id.currentPath)
18、; service = new DataService(); button = (Button) findViewById(R.id.button); fileService = new FileService(); try initListView(/); catch (Exception e) e.printStackTrace(); initActionBar(); initEvents(); private void initEvents() /给每一个Item添加点击事件 listView.setOnItemClickListener(listener1); /界面上每一个视图组件都
19、可以使用上下文菜单 registerForContextMenu(listView); Override public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) menu.add(1, ITEM_CREATE, 0, 新建); menu.add(1, ITEM_COPY, 1, 复制); menu.add(1, ITEM_PAST, 2, 粘贴); menu.add(1,ITEM_DELETE , 2, 删除
20、); ; Override public boolean onContextItemSelected(MenuItem item) / 触发上下文菜单的组件 AdapterContextMenuInfo info =(AdapterContextMenuInfo) item.getMenuInfo(); int position = info.position; int itemId = item.getItemId(); switch (itemId) case ITEM_CREATE: button.setEnabled(true); break; case ITEM_COPY: butt
21、on.setEnabled(true); break; case ITEM_PAST: button.setEnabled(true); break; case ITEM_DELETE: boolean flag = doubleCheck(); break; return true; private boolean doubleCheck() final Result res = new Result(false); Builder builder = new Builder(this); builder.setTitle(警告); builder.setMessage(你确定删除吗?);
22、builder.setPositiveButton(确认, new OnClickListener() public void onClick(DialogInterface dialog, int which) / 匿名内部类在使用外部作用域的变量的时候,不能修改这个变量 res.setFlag(true); ); builder.setNegativeButton(取消, null); return res.isFlag(); public void past(View v) button.setEnabled(true); private OnItemClickListener list
23、ener1 = new OnItemClickListener() public void onItemClick(android.widget.AdapterView parent, View view, int position, long id) com.jsu.mobilesafe.bean.FileItem item = list.get(position); String path = item.getFilePath(); try initListView(path); catch (Exception e) e.printStackTrace(); ; ; private vo
24、id initListView(String path) throws Exception list = service.getFiles(path); MyAdapter adapter = new MyAdapter(this,R.layout.list_item, list); /绑定适配器 listView.setAdapter(adapter); pathView.setText(path); private void initActionBar() bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MO
25、DE_TABS); for (int i = 0; i Constants.TABS_TITLE.length; i+) addTab(Constants.TABS_TITLEi); private void addTab(String title) Tab tab = bar.newTab(); tab.setText(title); tab.setTabListener(listener); bar.addTab(tab); 3.4发送短信模块public class SendSms extends Activity EditText number, content; Button sen
26、d; SmsManager sManager; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.sendsms_main); / 获取SmsManager sManager = SmsManager.getDefault(); / 获取程序界面上的两个文本框和按钮 number = (EditText) findViewById(R.id.number); content = (EditText) findVi
27、ewById(R.id.content); send = (Button) findViewById(R.id.send); / 为send按钮的单击事件绑定监听器 send.setOnClickListener(new OnClickListener() Override public void onClick(View arg0) / 创建一个PendingIntent对象 PendingIntent pi = PendingIntent.getActivity( SendSms.this, 0, new Intent(), 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