




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计论文基于android的短信管理软件学生姓名: 指导老师: 日期: 第一章 绪论1.1研究背景 目前,android操作系统已经成为了手机操作系统的的主流,而作为一款的手机操作系统,手机主要功能之一的短信功能是绝对不可缺少的。对于一个手机使用者来说每天都会处理大量的短信息,诸如,朋友、家人、同事间短信,就算是从来不发短信,也会收到几条广告信息。在这个“时间就是金钱”的时代,速度就是决定一切的关键。 同时,随着微信,手机qq等软件的出现,各种繁复新奇的功能令人们眼花缭乱轮,越来越多的人开始通过其他软件进行聊天通讯,照里说原本手机短信功能应该显得比较鸡肋,然而事实并不是,因为种种原因,短信管理软件虽然在功能上有所欠缺,但它依然占据着通讯工具的主流,其地位不可动摇。 基于以上的原因,开发出能够更快的和更方便的管理短信的软件对于操作系统为人们所喜爱极为重要。1.2研究意义本课题的研究目的是开发出一款在android操作系统下运行的界面友好,操作方便,功能完善的手机短信收发管理软件,能够帮助用户更好地管理短信,以便节省更多的时间。1.3开发环境及工具开发环境:win7工具:eclipse+sdk,jdk1.6,android手机 1.4系统所需android基本组件的介绍1.4.1 activity 应用程序中,一个activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。activity之间通过intent进行通信。在intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。 典型的动作类型有:m ain(activity的门户)、view、pick、edit 等。而动作对应的数据则以uri 的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为view 的intent,以及一个表示这个人的uri。 与之有关系的一个类叫intentfilter。相对于intent 是一个有效的做某事的请求,一个intentfilter 则用于描述一个activity(或者intentreceiver)能够操作哪些intent。一个activity 如果要显示一个人的联系方式时,需要声明一个intentfilter,这个intentfilter 要知道怎么去处理view 动作和表示一个人的uri。intentfilter 需要在androidmanifest.xml 中定义。通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startactivity(intent myintent)方法。然后,系统会在所有安装的应用程序中定义的intentfilter 中查找,找到最匹配myintent 的intent 对应的activity。新的activity 接收到myintent 的通知后,开始运行。当startactivity 方法被调用将触发解析myintent 的动作,这个机制提供了两个关键好处:a、activities 能够重复利用从其它组件中以intent 的形式产生的一个请求;b、activities 可以在任何时候被一个具有相同intentfilter 的新的activity 取代。1.4.2 broadcastreceive广播接收器 你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用notificationmanager来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息1.4.3 service服务 一个service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用context.startservice()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用context.bindservice()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。1.4.4 content provider内容提供者 android平台提供了content provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个sqlite数据库、或以任何其他合理的方式,其他应用可以通过contentresolver类(见contentprovideraccessapp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。第二章 短信管理系统的分析与设计2.1短信管理系统软件架构2.1.1特性功能分析一个好的短信管理系统要具备以下几个特点:1人性化的界面:一个再优秀、功能再齐全的系统如果界面做的极不美观,那么就算它有完美的功能,也极少有人会去使用它。所以,一个人性化并且美观的界面是一个优秀的软件必须所拥有的,好的界面将会拥有良好的用户体验,才会有更多的用户去使用。2齐全的功能:一个系统最重要的就是功能,如果没有功能那就不是一个系统而只是一个空壳。可以说功能就是软件的本身,没有功能就不成软件。一个优秀的短信管理系统所需要的功能是接收、发送短信,单一或者批量删除短信,联系人管理等。2.1.2基本功能分析根据软件需求,方便软件的开发、维护,切合模块“高内聚、低耦合”思想,特将短信管理系统分解为3个子系统:短信接收与发送、短信查看管理,设置。系统功能结构如图1所示。将系统分解后,子系统模块如表1所示表1子系统编号英文名称中文名称业务职能1send_receive短信接收与发送短信的接受与发送2managemsg短信管理查看和管理短信3setting设置设置界面短信管理软件短信收发短信管理选择联系人对话框显示发送短信接收短信短信转发短信列表显示自定义界面删除短信文件发送设置图12.2短信管理系统各个模块功能分析 为了便于理解短信管理系统的各个功能,我们以表格的形式分析各个功能的作用。具体描述如表2所示表2模块编号英文名称中文名称业务职能所属子系统01sendmsg短信发送发送短信短信接收与发送02receive短信接收接收短信短信接收与发送03chosecontract选择联系人发送短信是在联系人中选择发送对象短信接收与发送04msgclock消息提示接收到短信时发出提示音短信接收与发送05msglist短信列表在主界面显示联系人短信列表短信管理06lookmsg对话框显示与联系人的对话短信管理07responsemsg短信回复回复短信短信管理08deletemsg删除短信删除短信短信管理09repost转发短信转发短信短信管理10transmit文件传送传送文件短信管理11interfacesetting界面设置选择并设置界面设置2.3短信管理系统接口与数据库设计2.3.1接口设计在短信收发需要与联系人关联,同时需要将发送和收到的短信存入数据库,该系统的接口如表3所示:表3子系统编号:1子系统英文名称:send_receive子系统中文名称:短信收发接口编号接口名称接口类型接口性质相关对象1sendreceive发送接收短信并存入数据库双向用户2contact选择联系人输入在短信查看中主要需要查询短信信息和回复短信,接口设计如表4所示表4子系统编号:2子系统英文名称:managemsg子系统中文名称:短信查看接口编号接口名称接口类型接口性质相关对象1managermsg查询短信,根据联系人删除短信双向用户2transmit传送文件输出用户在管理短信中主要的接口如表5所示表5子系统编号:3子系统英文名称:setting子系统中文名称:短信管理接口编号接口名称接口类型接口性质相关对象1setting设置界面用户2.3.2数据库设计1. 概念结构设计在此短信管理系统系统中设计用户,短信,联系人3个实体,其中用户属性包括姓名,短信属性包括会话id,联系人id,发件日期,号码,是否阅读,状态,内容,类型,主题等,联系人属性有姓名、号码,联系人id。er图如图2所示。联系人发送接收内容号码id姓名联系人id发件日期短信用户查看删除选择类型对方号码会话id姓名图2:系统er图2.运用设计android的短信数据库和联系人数据库在android操作系统中都是设计好,可以直接使用的,我们在编辑短信管理软件时只要使用content provider,通过url就可以直接调用数据库中的表了。我在设计是主要用到的表是conversations和contacts。具体设计如表6,表7所示。表6表名字段名字段类型说明conversations_idintegeridthread_idinteger会话idaddresstext对方号码personinteger联系人iddateinteger发件日期typeinteger短信类型,发送或接收bodytext内容表7表名字段名字段类型说明contacts_idintegeriddisplay_nametext联系人姓名photo_idinteger照片idaddresstext电话号码第三章 短信管理系统的实现3.1界面层设计与实现短信管理系统主要有短信发送界面,短信列表界面和对话框界面。新建短信后的短信发送界面布局:短信列表显示界面主要根据联系人显示短信,每个联系人占据一列,列中显示与该联系人最新的联系信息。短信列表显示界面布局:对话框界面显示该联系人与用户所有存储的数据库中的聊天信息,同时用户可在最下方编辑并发送信息。对话框界面布局:3.2短信发送与接收设计与实现android短信的发送与接收都是通过broadcastreceive实现的,发送短信通过smsmanager的sendtextmessage()方法实现。短信发送成功后,发送的短信信息会被保存到数据库中,同样,当手机通过broadcastreceive接收到短信时,也会将短信存入数据库。具体代码如下:sendmsg.java:public class sendmsg extends activity string sent_sms_action = sent_sms_action;string delivered_sms_action = delivered_sms_action; overrideprotected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.sendmsg_main);button btnsend = (button) findviewbyid(r.id.btnsend);btnsend.setonclicklistener(new onclicklistener() overridepublic void onclick(view arg0) / todo auto-generated method stubedittext telnotext = (edittext) findviewbyid(r.id.telno);edittext contenttext = (edittext) findviewbyid(r.id.content); /获取参数值短信号码和内容string telno = telnotext.gettext().tostring();string content = contenttext.gettext().tostring();sendsms(telno, content); / 保存发送短信的内容 contentvalues values = new contentvalues(); values.put(address, telno); values.put(date, system.currenttimemillis(); values.put(body, content); values.put(type, 0);/0为发件箱信息 getcontentresolver().insert(uri.parse(content:/sms/sent), values); /界面跳转mainactivity intent intent = new intent(); intent.setclass(sendmsg.this,mainactivity.class); startactivity(intent););private void sendsms(string telno, string content) smsmanager sms = smsmanager.getdefault();/ 创建sentintent参数intent sentintent = new intent(sent_sms_action);pendingintent sentpi = pendingintent.getbroadcast(sendmsg.this, 0,sentintent, 0);/ 创建deliveredintent参数intent deliveredintent = new intent(delivered_sms_action);pendingintent delivepi = pendingintent.getbroadcast(sendmsg.this,0, deliveredintent, 0); /发送短信信息sms.sendtextmessage(telno, null, content, sentpi, delivepi);recevie.javapublic class receiver extends broadcastreceiver private string telno;private stringbuilder messagebody = new stringbuilder();private final string smsaction = private contentresolver resolver;/ overridepublic void onreceive(context context, intent intent) string action = intent.getaction();/获取短信if (action.equals(smsaction) bundle bundle = intent.getextras();/遍历短信if (null != bundle) object pdus = (object) bundle.get(pdus);smsmessage msg = new smsmessagepdus.length;for (int i = 0; i pdus.length; i+) msgi = smsmessage.createfrompdu(byte) pdusi);for (smsmessage currmsg : msg) messagebody.append(currmsg.getdisplaymessagebody();telno = currmsg.getdisplayoriginatingaddress(); /将短信存入数据库addsmstodb(telno, messagebody.tostring();/将短信添加到系统短信数据库 private void addsmstodb(string telno, string content) contentvalues values = new contentvalues();values.put(date, system.currenttimemillis();values.put(type, 1);/1为收件箱信息values.put(address, telno);values.put(body, content);resolver.insert(uri.parse(content:/sms/),values);之后为了实现收发和读取功能必须在androidmainfest.xml中增加一些权限,代码如下: 同时注册sendmsg.java的activity: 3.3短信列表显示和删除功能的实现短信列表显示界面主要根据联系人显示短信,每个联系人占据一列,列中显示与该联系人最新的联系信息。通过点击列表项可查看与该联系人的对话列表,通过长按联系人列表项可删除该列。通过联系人号码将与同一联系人的联系信息从sms表中取出,再将数据库信息放入list中,最后通过simpleadapter适配器将list适配进布局listview中。从数据取出最近信息的代码如下: / 获得数据库中的信息public listmap getdata() / 定义列表list存放取出的数据listmap list = new arraylistmap();/ 从数据库中取出数据并根据日期排列cursor smscursor = getcontentresolver().query(uri.parse(content:/sms/), null, null, null, date desc);/ 循环cursor数据while (smscursor.movetonext() / 判断cursor的数据在list中是否已有该联系人的信息boolean has = false;for (int i = 0; i list.size(); i+) map map1 = list.get(i);string num = (string) map1.get(address);if (num.equals(smscursor.getstring(smscursor.getcolumnindex(address) has = true;break;/ 若list中未有联系人的信息,则将该数据存入list中if (!has) / 定义map存储一列数据map map = new hashmap();/ 将数据库中属性为date的数据从long型转化为yyyy-mm-dd hh:mm:ss格式simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);/ 获取并存储数据date date = new date(smscursor.getlong(smscursor.getcolumnindex(date);map.put(date, sdf.format(date);int type = smscursor.getint(smscursor.getcolumnindex(type);string body = smscursor.getstring(smscursor.getcolumnindex(body);/ 判断信息长度是否大于20,若是区其前8字后加.if (body.length() 20) body = body.substring(0, 8);body = body + .;map.put(body, body); else map.put(body, smscursor.getstring(smscursor.getcolumnindex(body); string address = smscursor.getstring(smscursor.getcolumnindex(address);map.put(address, address);map.put(read,smscursor.getint(smscursor.getcolumnindex(read);map.put(_id,smscursor.getint(smscursor.getcolumnindex(_id);list.add(map);smscursor.close();return list;之后将list通过适配器存入listview布局的代码如下:simpleadapter simpleradapter = new simpleadapter(this, getdata(),r.layout.listview, new string address, date, body ,new int r.id.tvtelno, r.id.tvdate, r.id.tvcontent );msglist.setadapter(simpleradapter);长按短信列表项显示提示框和删除短信的代码如下:public boolean onitemlongclick(adapterview arg0, view arg1,int arg2, long arg3) / todo auto-generated method stub /显示并设置提示框alertdialog.builder ad = new alertdialog.builder(mainactivity.this);textview tv = (textview) arg1.findviewbyid(r.id.tvtelno);final string telno = tv.gettext().tostring();ad.settitle(telno); ad.setitems(new string 删除, 取消 ,/设置删除和取消按钮new dialoginterface.onclicklistener() overridepublic void onclick(dialoginterface dialog,int which) / todo auto-generated method stubswitch (which) case 0:/删除短信uri uri = uri.parse(content:/sms/);getcontentresolver().delete(uri, address=?,new string telno );break;case 1:/取消break;default:break;);ad.show();return true;);3.4短信对话框显示功能的实现对话框界面能显示用户与联系人的对话,下方可让用户发送短信。对话框界面通过intent从列表界面获取联系人号码,通过查询该号码从表sms中获取与该联系人的所用现存信息,并以对话形式显示。同时显示对话效果,需要重写simplecursoradapter的getview方法。在该方法中,通过判断sms的属性type,将用户和联系人的对话分别放在屏幕两侧。若type为1,则为联系人发的短信,在左侧显示,type为0则为用户所发信息。查询并适配的语句如下:final cursor c = getcontentresolver().query(uri, projection,address=?, new string telno , date asc);if (c.movetofirst() suppresswarnings(deprecation)simplecursoradapter adapter = new simplecursoradapter(this,r.layout.listview1, c, new string address, date,body , new int r.id.tvtelno1, r.id.tvdate1,r.id.tvcontent1 ) override /重写getview方法实现界面效果public view getview(int position, view convertview,viewgroup parent) view result = super.getview(position, convertview, parent);int index_type = c.getcolumnindex(type);int index_address = c.getcolumnindex(address);int sms_type = c.getint(index_type);string sms_phonenmuber = c.getstring(index_address);view container = result.findviewbyid(r.id.show_msg);textview telno = (textview) (result.findviewbyid(r.id.tvtelno1);linearlayout.layoutparams containerparameter = (linearlayout.layoutparams) (container.getlayoutparams(); /通过判断type类型,将短信放入界面左右两侧if (sms_type = 1) telno.settext(sms_phonenmuber);container.setbackgroundresource(r.drawable.left);containerparameter.gravity = gravity.left; else if (sms_type = 2) telno.settext(我:);container.setbackgroundresource(r.drawable.right);containerparameter.gravity = gravity.right;container.setlayoutparams(containerparameter);return result;3.5短信联系人功能的实现再将从数据库中读取的信息写入界面时,我们需要判断该联系人的信息是否在联系人软件中有存档,若有,则需要将原本要显示的联系人号码改为该联系人姓名。获取并判断联系人的代码如下 :contact.javapublic class contactpublic contact() public string getcontactnamefromphonenum(context context,string contactinfo) string contactnames = ; uri uri = uri.parse(content:/com.android.contacts/phone_lookup/ + contactinfo); cursor cursor = context.getcontentresolver().query(uri, null, null, null, null); if(cursor.movetofirst() string contactname = cursor.getstring(cursor.getcolumnindex(display_name); cursor.close(); if(contactnames=) contactnames = contactname; else contactnames = contactnames+,+contactname; return contactnames;3.5文件传送功能的实现3.6界面设置功能的实现第四章 结语4.1总结4.2展望您好,为你提供优秀的毕业论文参考资料,请您删除以下内容,o(_)o谢谢!anationalsurveywasrecentlylaunchedtoevaluatetheeyehealthofchinesechildrenandteenagers.onjune6,chinasannualnationaldayforeyecare,thechinayouthdevelopmentservicecenterandzhejiangmedicine,aleadinglistedchinesepharmaceuticalcompany,jointlyannouncedthekickoffofthesurvey.inaboutonemonth,aquestionnairecompiledbytopeyecaremedicalexpertsinchinawillbedistributedthroughmultipleonlinepartners,includingh,aswellasthroughofflinesurveyeventsheldinuniversities,middleschoolsandprimaryschoolsacrossthecountry.areportwillbereleasedbasedonthesurveystatisticsandanalysis,andmostimportantly,guidelinesforparentsandyouthonhowtocarefortheeyesandpreventmyopiaagrowingprobleminchinasdigitizedsociety,willalsobeattachedonthereport.myopiaisnotonlyadiseasethatmakespeopleseethingsblurrily,butalsoleadstoseverecomplications,suchasglaucoma(increasedpressurewithintheeyeball),andcancauseblindness,saidzhouyuehua,anestablishedeyecarespecialistwithbeijingtongrenhospital.itisveryimportantforparentsandchildrentoknowabouttheriskandcarefortheireyes.thereareabout450millionmyopiapatientsinchina.amongchinesemyopiapatients,30millionareseverepatients,accordingtozhoutheprevalenceofmyopiaamonghighschoolandcollegestudentsismorethan70percent,andthesituationiscontinuouslyworsening,headded.sunzhu,directorwiththechinayouthdevelopmentservicecenter,saidlonghoursofstudy,lackofexercise,especiallyoutdooractivities,andattachmenttoelectronicscreenaresomeofthetopreasonsbehindthewidespreadmyopiaproblems,andtheincreaseofyoungerpatients,althoughchinahasmadegreatprogressinimprovingthehardwarefacilitiesandlightingconditionsinschools.hesaidhehopesthesurveywillalertpeopleonthethreateningsituation,andalsohelpmedicalexpertstobetterguidelineparentsandchildrensbehaviorstocareforeyes,basedonthetimelyandfactualstatisticsthesurveycollected.aseriesoffollow-upeventswillalsobeheldinsixcities,includingjinaninshandongprovince,andchangshainhunanprovince,toeducatepeopleonhowtocareforeyesafterthesurveystarted. more and more chinese are jogging to get and stay fit. most joggers will run alone, but some will jog with friends or even coaches. the beijing olympic forest park is one of the most popular spots. it is packed with runners in the afternoon, usually after work, and at weekends. jogging after a whole days work can be a way to unwind. it is true for he wenjun, whose workplace is right near the forest park. she discovered her athletic aptitude at the age of seven, when she began playing tennis. then she turned to jogging, and she has persevered with it for 10 years. i come to jog almost every day after work, whenever i have time. i think jogging is good for my health. and for me, a girl, it helps me to achieve to eternal goal, to keep slim, he said. he says she prefers jogging alone, so she can focus better. she loves jogging, even during beijings smoggy days. if the smog is severe, ill hold off jogging for a while. but if i really want to get away from work, ill wear a mask,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度重点工程土石方工程居间服务费标准范本
- 2025版滕彩离婚协议书附离婚协议签订及履行监督服务
- 2025版涉外法律事务处理及咨询合同下载
- 2025版全国离婚协议书审查与鉴定合同
- 2025版土地拍卖后续服务合同示范文本
- 2025版老旧小区改造工程外包施工合同范本
- 2025年切削钻机租赁及智能化改造服务合同
- 2025年度关键岗位保密及禁止同行业竞争协议
- 2025年度电工电气设备租赁与维护服务合同
- 2025版在线医疗健康服务平台采购与推广合同
- 膝痹中医护理方案效果总结分析报告
- 铸造基础知识及常见铸造缺陷简介演示
- 中式烹调师(高级技师考试资料)
- 仓储技术与库存理论简论
- 日地空间灾害性天气的发生发展和预报研究课件
- 西安大唐不夜城的项目整体推广的策略提案的报告课件
- 可下载打印的公司章程
- 少先队辅导员工作记录表(共7页)
- 公开课教学评价表
- 消防验收规范标准(最新完整版)19844
- 教研工作手册
评论
0/150
提交评论