注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

android飞信短信箱程序源码讲解 (CSDN)  

2010-06-16 21:43:56|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

 

一、程序演示

图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(Uri url, ContentValues values)

2.删除数据

m_context.getContentResolver()

.delete(Uri url, String where, String[] selectionArgs);

3.修改数据

m_context.getContentResolver()

.update(Uri uri, ContentValues values,

String where, String[] selectionArgs);

4.查询数据

m_context.getContentResolver()

.query( Uri uri, String[] projection,

         String selection, String[] selectionArgs,

String sortOrder);

 

代码示例:

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.获取联系人头像代码
//获取联系人头像

Uri peopleUri = Uri.parse( "content://contacts/people/"+contactItem.getId() );

Bitmap bitmap = People.loadContactPhoto(m_Context, peopleUri,  R.drawable.ic_contact_picture, null);


2.编辑已经存在的联系人跳转到系统编辑界面
public boolean editExitedContact(Context context, String contactId)

{

try

{

Uri editContact = null;

editContact = ContentUris.withAppendedId(People.CONTENT_URI,  Integer.parseInt(contactId));

Intent insertIntent = new  Intent(Intent.ACTION_EDIT,  editContact);

Activity activity = (Activity) context;

activity.startActivityForResult(insertIntent, Constants.REQUEST_GET_CONTACT_INFO);

}

catch (Exception e)

{

return false;

}

return true;

}

3.跳转到浏览器
public static void skipUrl(Context from,String url)

{

Uri uri = Uri.parse(url);

     Intent intent  = new Intent(Intent.ACTION_VIEW, uri);

     from.startActivity(intent);

}


4.拨打电话
* 直接拨打一个电话,号码为callNumber
* isAction true=直接播出,false=调用拨打界面


if( isAction )

{

    action=Intent.ACTION_CALL;  //直接播出

}

else

{

    action=Intent.ACTION_DIAL;  //调用界面

}

Intent intent = new Intent(action, Uri.parse("tel://" + callNumber));

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);


5.复制文本
private void copy2ClipboardManager(String text)

{

ClipboardManager clipboard = (ClipboardManager)  getSystemService(Context.CLIPBOARD_SERVICE);

     clipboard.setText( text );

}

  评论这张
 
阅读(744)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017