android飞信短信箱程序源码讲解!(推荐)
一、程序演示图1.进入程序后的第1页面,头部的新消息提示在任意页面都会弹出。 图2.未读消息数量提示,任意页面。 图3.点击新建短信,(或者会话中的转发选项)需要输入接收者手机号码 图4.点击上图接收者输入框右侧的“+”按钮,弹出联系人选择列表,选择一个联系人后,该联系人的手机号码就会自动添在新建短信的输入框内。 图5.点击清空全部短信的menu后的2次确认,所有删除操作都有2次确认,包括清空该人,清空该条等选项。 图6.长按短信列表上的某条记录弹出的选项。查看对话直接进入短信会话页面,呼叫是直接拨打该联系人的电话,呼叫前编辑是到系统拨号盘页面,清空该人即删除该联系人全部短信。 图7.从系统通知栏查看新短信通知,点击后可进入短信会话页面。 图8.短信会话页面,头部为对方信息。 图9.长按某条短信弹出的信息选项,提取号码,回拨电话,浏览网址,是根据当前短信是否含有电话号码,和URL而自动显示的。 图10.点击提取号码,回拨电话,浏览网址而弹出的电话,URL的选项。 图11.短信会话页面的menu。 图12.插入表情MENU,的表情选项 图13.常用短语的选项。 图14.插入表情,常用短语选择后会自动添加到对话框中。 二、程序框架讲解 三、图15.程序包,类视图 1.activity 包:页面的类。 1.1AbstractBaseActivity 页面对象的父类 1.2ConversationActivity 会话页面 1.3SMSListActivity 短信主列表页面 2.adapter包:列表的数据适配器。 2.1ContactsListAdapter 联系人列表数据适配器 2.2ConversationAdapter 短信会话 数据适配器 2.3SimpleListAdapter 一种简单的列表形式的数据适配器 2.4SmileyListAdapter 表情列表数据适配器 2.5SMSListAdapter 短信列表数据适配器 3.common包:常量及工具。 3.1Constants 数值常量 3.2PhoneBookOperate 手机通讯录操作方法集 3.3RichTextParser 富文本显示方法 3.4SMSOperate 短信操作方法集 3.5Utility 公用方法集 4.core包:核心方法,主要用于异步处理。 4.1LogicSet 核心方法调用入口 4.2Request 异步处理线程 4.3RequestContent 异步处理方法接口 5.GIF包:解析GIF动画 5.1GIFDecode gif动画解析类 6.interfaces包:接口类 6.1DataViewListener 核心回调页面的数据接口 6.2DialogListener 对话框接口 6.3SimpleListViewDrawable简单数据列表的显示接口 7.model包: 数据实体类 7.1Contact 手机通讯录数据 7.2SMS 短信数据 7.3SMSGroup 短信组数据 8.services包:系统消息处理类 8.1SMSreceiver_bak 监听系统短信箱 8.2SMSreceiver 截获系统短信 9.textParsing包:富文本解析类 9.1AutoMachine 9.2DefineRichText 9.3ModeString 9.4Node 9.5RichText 9.6RichTextMark 9.7TestMain 三、数据库操作 1.增加数据 m_context.getContentResolver() .insert(Uriurl,ContentValuesvalues) 2.删除数据 m_context.getContentResolver() .delete(Uriurl,Stringwhere,String[]selectionArgs); 3.修改数据 m_context.getContentResolver() .update(Uriuri,ContentValuesvalues, Stringwhere,String[]selectionArgs); 4.查询数据 m_context.getContentResolver() .query(Uriuri,String[]projection, Stringselection,String[]selectionArgs, StringsortOrder); 代码示例: 1.写短信箱操作 2.删除短信操作 3.修改短信为已读 4.根据手机号码查找联系人 四、数据库字段介绍 1.短信数据库,URI = "content://sms" 字段 值 意义 _id 48 短消息在短信数据库里的序号 thread_id 16 对话的序号 address +8613411884805 对方手机号 person null 对方在联系人数据库里的ID,null为不在联系人数据库里 date 1256539465022 日期 long型,想得到具体日期自己转换吧! protocol 0 协议 read 1 已读状态 status -1 状态 type 1 类型 1是接收到的,2是发出的,0是编辑好,尚未发出的 reply_path_present 0 subject null 会话主题 body 您好 消息内容 service_center +8613800755500 短信服务中心号码编号,可以得知该短信是从哪里发过来的 2.联系人数据库 strColumnName = _sync_id strColumnValue=null strColumnName = primary_organization strColumnValue=null strColumnName = notes strColumnValue=null strColumnName = primary_phone strColumnValue=1 strColumnName = status strColumnValue=null strColumnName = im_handle strColumnValue=null strColumnName = _sync_local_id strColumnValue=null strColumnName = im_account strColumnValue=null strColumnName = _sync_time strColumnValue=null strColumnName = im_protocol strColumnValue=null strColumnName = mode strColumnValue=null strColumnName = label strColumnValue=null strColumnName = times_contacted strColumnValue=0 strColumnName = name strColumnValue=é??è?3 strColumnName = send_to_voicemail strColumnValue=null strColumnName = primary_email strColumnValue=null strColumnName = custom_ringtone strColumnValue=null strColumnName = sort_string strColumnValue=í?¤í2?í??ío3à? strColumnName = _sync_version strColumnValue=null strColumnName = last_time_contacted strColumnValue=null strColumnName = _sync_account strColumnValue=null strColumnName = display_name strColumnValue=é??è?3 strColumnName = number_key strColumnValue=77681111831 strColumnName = number strColumnValue=13811118677 strColumnName = phonetic_name strColumnValue=null strColumnName = _id strColumnValue=1 strColumnName = type strColumnValue=2 strColumnName = _sync_dirty strColumnValue=1 strColumnName = starred strColumnValue=0 4.其他数据库 //Available Uri string content://contacts/people //本地联系人列表信息 content://contacts/phones //本地联系人列表信息 content://call_log/calls/ //本地通话记录 content://mms 彩信 content://mms-sms/threadID content://mms-sms/conversations content://mms-sms/messages/byphone content://mms-sms/undelivered content://mms-sms/draft String strUriInbox = "content://sms/inbox"; //SMS_INBOX:1 String strUriFailed = "content://sms/failed"; //SMS_FAILED:2 String strUriQueued = "content://sms/queued"; //SMS_QUEUED:3 String strUriSent = "content://sms/sent"; //SMS_SENT:4 String strUriDraft = "content://sms/draft"; //SMS_DRAFT:5 String strUriOutbox = "content://sms/outbox"; //SMS_OUTBOX:6 String strUriUndelivered = "content://sms/undelivered"; //SMS_UNDELIVERED String strUriAll = "content://sms/all"; //SMS_ALL String strUriConversations= "content://sms/conversations";//you can delete one conversation by thread_id String strUriAll = "content://sms" //you can delete one message by _id 五、其他方法 1.获取联系人头像代码 //获取联系人头像 UripeopleUri=Uri.parse("content://contacts/people/"+contactItem.getId()); Bitmapbitmap=People.loadContactPhoto(m_Context,peopleUri,R.drawable.ic_contact_picture,null); 2.编辑已经存在的联系人跳转到系统编辑界面 publicbooleaneditExitedContact(Contextcontext,StringcontactId) { try { UrieditContact=null; editContact=ContentUris.withAppendedId(People.CONTENT_URI,Integer.parseInt(contactId)); IntentinsertIntent=newIntent(Intent.ACTION_EDIT,editContact); Activityactivity=(Activity)context; activity.startActivityForResult(insertIntent,Constants.REQUEST_GET_CONTACT_INFO); } catch(Exceptione) { returnfalse; } returntrue; } 3.跳转到浏览器 publicstaticvoidskipUrl(Contextfrom,Stringurl) { Uriuri=Uri.parse(url); Intentintent=newIntent(Intent.ACTION_VIEW,uri); from.startActivity(intent); } 4.拨打电话 *直接拨打一个电话,号码为callNumber *isActiontrue=直接播出,false=调用拨打界面 if(isAction) { action=Intent.ACTION_CALL;//直接播出 } else { action=Intent.ACTION_DIAL;//调用界面 } Intentintent=newIntent(action,Uri.parse("tel://"+callNumber)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); 5.复制文本 privatevoidcopy2ClipboardManager(Stringtext) { ClipboardManagerclipboard=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } 本文转自 kome2000 51CTO博客,原文链接:http://blog.51cto.com/kome2000/578722