android 短信 彩信 数据库
来源:互联网 发布:嘻哈四重奏知乎 编辑:程序博客网 时间:2024/04/28 06:16
android 短信 彩信 数据库
转自:http://gnibre.javaeye.com/blog/558031
短信 sms
文件 /data/data/com.android.providers.telephony/databases/mmssms.db
这个数据库有13张表,sms表存了短信信息。
sms表的uri是
- public static final Uri CONTENT_URI =
- Uri.parse("content://sms");
表项含义,我猜的
0 _id
1 thread_id 在短信界面里显示在第几组( 相同联系人的短信在同意行),英文名叫话题。
2 address 电话好吗
3 person ? 存在电话簿里的名字 。 可能吧
4 date 日期
5 protocol ?..
6 read ? 1- 已读 0-未读
7 status ?
8 type ? 2 我发送
9 reply_path_present ?
10 subject
11 body 短信内容
12 service_center ...
好没信息量。。。。
把源码补上。
在frameworks/base/core/java/android/provider/Telephony.java
- /**
- * The thread ID of the message
- * <P>Type: INTEGER</P>
- */
- public static final String THREAD_ID = "thread_id";
- /**
- * The address of the other party
- * <P>Type: TEXT</P>
- */
- public static final String ADDRESS = "address";
- /**
- * The person ID of the sender
- * <P>Type: INTEGER (long)</P>
- */
- public static final String PERSON_ID = "person";
- /**
- * The date the message was sent
- * <P>Type: INTEGER (long)</P>
- */
- public static final String DATE = "date";
- /**
- * The protocol identifier code
- * <P>Type: INTEGER</P>
- */
- public static final String PROTOCOL = "protocol";
- /**
- * Has the message been read
- * <P>Type: INTEGER (boolean)</P>
- */
- public static final String READ = "read";
- /**
- * The TP-Status value for the message, or -1 if no status has
- * been received
- */
- public static final String STATUS = "status";
- us 举例:
- public static final int STATUS_NONE = -1;
- public static final int STATUS_COMPLETE = 0;
- public static final int STATUS_PENDING = 64;
- public static final int STATUS_FAILED = 128;
- /**
- * The type of the message
- * <P>Type: INTEGER</P>
- */
- public static final String TYPE = "type";
- 举例
- public static final int MESSAGE_TYPE_ALL = 0;
- public static final int MESSAGE_TYPE_INBOX = 1;
- public static final int MESSAGE_TYPE_SENT = 2;
- public static final int MESSAGE_TYPE_DRAFT = 3;
- public static final int MESSAGE_TYPE_OUTBOX = 4;
- public static final int MESSAGE_TYPE_FAILED = 5; // for failed outgoing messages
- public static final int MESSAGE_TYPE_QUEUED = 6; // for messages to send later
- /**
- * Whether the <code>TP-Reply-Path</code> bit was set on this message
- * <P>Type: BOOLEAN</P>
- */
- public static final String REPLY_PATH_PRESENT = "reply_path_present";
- /**
- * The subject of the message, if present
- * <P>Type: TEXT</P>
- */
- public static final String SUBJECT = "subject";
- /**
- * The body of the message
- * <P>Type: TEXT</P>
- */
- public static final String BODY = "body";
- /**
- * The service center (SC) through which to send the message, if present
- * <P>Type: TEXT</P>
- */
- public static final String SERVICE_CENTER = "service_center";
- /**
- * Has the message been locked?
- * <P>Type: INTEGER (boolean)</P>
- */
- public static final String LOCKED = "locked";
- **
- * The id of the sender of the conversation, if present
- * <P>Type: INTEGER (reference to item in content://contacts/people)</P>
- */
- public static final String PERSON = "person";
彩信。
1、pdu表
mmssms.db库中的pdu表存储了彩信标题、彩信接收时间和彩信ID等信息,其中“_id”是主键,唯一标识了一个条彩信。
pdu 表源码
- /**
- * Base columns for tables that contain MMSs.
- */
- public interface BaseMmsColumns extends BaseColumns {
- public static final int MESSAGE_BOX_ALL = 0;
- public static final int MESSAGE_BOX_INBOX = 1;
- public static final int MESSAGE_BOX_SENT = 2;
- public static final int MESSAGE_BOX_DRAFTS = 3;
- public static final int MESSAGE_BOX_OUTBOX = 4;
- /**
- * The date the message was sent.
- * <P>Type: INTEGER (long)</P>
- */
- public static final String DATE = "date";
- /**
- * The box which the message belong to, for example, MESSAGE_BOX_INBOX.
- * <P>Type: INTEGER</P>
- */
- public static final String MESSAGE_BOX = "msg_box";
- /**
- * Has the message been read.
- * <P>Type: INTEGER (boolean)</P>
- */
- public static final String READ = "read";
- /**
- * The Message-ID of the message.
- * <P>Type: TEXT</P>
- */
- public static final String MESSAGE_ID = "m_id";
- /**
- * The subject of the message, if present.
- * <P>Type: TEXT</P>
- */
- public static final String SUBJECT = "sub";
- /**
- * The character set of the subject, if present.
- * <P>Type: INTEGER</P>
- */
- public static final String SUBJECT_CHARSET = "sub_cs";
- /**
- * The Content-Type of the message.
- * <P>Type: TEXT</P>
- */
- public static final String CONTENT_TYPE = "ct_t";
- /**
- * The Content-Location of the message.
- * <P>Type: TEXT</P>
- */
- public static final String CONTENT_LOCATION = "ct_l";
- /**
- * The address of the sender.
- * <P>Type: TEXT</P>
- */
- public static final String FROM = "from";
- /**
- * The address of the recipients.
- * <P>Type: TEXT</P>
- */
- public static final String TO = "to";
- /**
- * The address of the cc. recipients.
- * <P>Type: TEXT</P>
- */
- public static final String CC = "cc";
- /**
- * The address of the bcc. recipients.
- * <P>Type: TEXT</P>
- */
- public static final String BCC = "bcc";
- /**
- * The expiry time of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String EXPIRY = "exp";
- /**
- * The class of the message.
- * <P>Type: TEXT</P>
- */
- public static final String MESSAGE_CLASS = "m_cls";
- /**
- * The type of the message defined by MMS spec.
- * <P>Type: INTEGER</P>
- */
- public static final String MESSAGE_TYPE = "m_type";
- /**
- * The version of specification that this message conform.
- * <P>Type: INTEGER</P>
- */
- public static final String MMS_VERSION = "v";
- /**
- * The size of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MESSAGE_SIZE = "m_size";
- /**
- * The priority of the message.
- * <P>Type: TEXT</P>
- */
- public static final String PRIORITY = "pri";
- /**
- * The read-report of the message.
- * <P>Type: TEXT</P>
- */
- public static final String READ_REPORT = "rr";
- /**
- * Whether the report is allowed.
- * <P>Type: TEXT</P>
- */
- public static final String REPORT_ALLOWED = "rpt_a";
- /**
- * The response-status of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String RESPONSE_STATUS = "resp_st";
- /**
- * The status of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String STATUS = "st";
- /**
- * The transaction-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String TRANSACTION_ID = "tr_id";
- /**
- * The retrieve-status of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String RETRIEVE_STATUS = "retr_st";
- /**
- * The retrieve-text of the message.
- * <P>Type: TEXT</P>
- */
- public static final String RETRIEVE_TEXT = "retr_txt";
- /**
- * The character set of the retrieve-text.
- * <P>Type: TEXT</P>
- */
- public static final String RETRIEVE_TEXT_CHARSET = "retr_txt_cs";
- /**
- * The read-status of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String READ_STATUS = "read_status";
- /**
- * The content-class of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String CONTENT_CLASS = "ct_cls";
- /**
- * The delivery-report of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String DELIVERY_REPORT = "d_rpt";
- /**
- * The delivery-time-token of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String DELIVERY_TIME_TOKEN = "d_tm_tok";
- /**
- * The delivery-time of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String DELIVERY_TIME = "d_tm";
- /**
- * The response-text of the message.
- * <P>Type: TEXT</P>
- */
- public static final String RESPONSE_TEXT = "resp_txt";
- /**
- * The sender-visibility of the message.
- * <P>Type: TEXT</P>
- */
- public static final String SENDER_VISIBILITY = "s_vis";
- /**
- * The reply-charging of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String REPLY_CHARGING = "r_chg";
- /**
- * The reply-charging-deadline-token of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String REPLY_CHARGING_DEADLINE_TOKEN = "r_chg_dl_tok";
- /**
- * The reply-charging-deadline of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String REPLY_CHARGING_DEADLINE = "r_chg_dl";
- /**
- * The reply-charging-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String REPLY_CHARGING_ID = "r_chg_id";
- /**
- * The reply-charging-size of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String REPLY_CHARGING_SIZE = "r_chg_sz";
- /**
- * The previously-sent-by of the message.
- * <P>Type: TEXT</P>
- */
- public static final String PREVIOUSLY_SENT_BY = "p_s_by";
- /**
- * The previously-sent-date of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String PREVIOUSLY_SENT_DATE = "p_s_d";
- /**
- * The store of the message.
- * <P>Type: TEXT</P>
- */
- public static final String STORE = "store";
- /**
- * The mm-state of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MM_STATE = "mm_st";
- /**
- * The mm-flags-token of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MM_FLAGS_TOKEN = "mm_flg_tok";
- /**
- * The mm-flags of the message.
- * <P>Type: TEXT</P>
- */
- public static final String MM_FLAGS = "mm_flg";
- /**
- * The store-status of the message.
- * <P>Type: TEXT</P>
- */
- public static final String STORE_STATUS = "store_st";
- /**
- * The store-status-text of the message.
- * <P>Type: TEXT</P>
- */
- public static final String STORE_STATUS_TEXT = "store_st_txt";
- /**
- * The stored of the message.
- * <P>Type: TEXT</P>
- */
- public static final String STORED = "stored";
- /**
- * The totals of the message.
- * <P>Type: TEXT</P>
- */
- public static final String TOTALS = "totals";
- /**
- * The mbox-totals of the message.
- * <P>Type: TEXT</P>
- */
- public static final String MBOX_TOTALS = "mb_t";
- /**
- * The mbox-totals-token of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MBOX_TOTALS_TOKEN = "mb_t_tok";
- /**
- * The quotas of the message.
- * <P>Type: TEXT</P>
- */
- public static final String QUOTAS = "qt";
- /**
- * The mbox-quotas of the message.
- * <P>Type: TEXT</P>
- */
- public static final String MBOX_QUOTAS = "mb_qt";
- /**
- * The mbox-quotas-token of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MBOX_QUOTAS_TOKEN = "mb_qt_tok";
- /**
- * The message-count of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String MESSAGE_COUNT = "m_cnt";
- /**
- * The start of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String START = "start";
- /**
- * The distribution-indicator of the message.
- * <P>Type: TEXT</P>
- */
- public static final String DISTRIBUTION_INDICATOR = "d_ind";
- /**
- * The element-descriptor of the message.
- * <P>Type: TEXT</P>
- */
- public static final String ELEMENT_DESCRIPTOR = "e_des";
- /**
- * The limit of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String LIMIT = "limit";
- /**
- * The recommended-retrieval-mode of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String RECOMMENDED_RETRIEVAL_MODE = "r_r_mod";
- /**
- * The recommended-retrieval-mode-text of the message.
- * <P>Type: TEXT</P>
- */
- public static final String RECOMMENDED_RETRIEVAL_MODE_TEXT = "r_r_mod_txt";
- /**
- * The status-text of the message.
- * <P>Type: TEXT</P>
- */
- public static final String STATUS_TEXT = "st_txt";
- /**
- * The applic-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String APPLIC_ID = "apl_id";
- /**
- * The reply-applic-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String REPLY_APPLIC_ID = "r_apl_id";
- /**
- * The aux-applic-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String AUX_APPLIC_ID = "aux_apl_id";
- /**
- * The drm-content of the message.
- * <P>Type: TEXT</P>
- */
- public static final String DRM_CONTENT = "drm_c";
- /**
- * The adaptation-allowed of the message.
- * <P>Type: TEXT</P>
- */
- public static final String ADAPTATION_ALLOWED = "adp_a";
- /**
- * The replace-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String REPLACE_ID = "repl_id";
- /**
- * The cancel-id of the message.
- * <P>Type: TEXT</P>
- */
- public static final String CANCEL_ID = "cl_id";
- /**
- * The cancel-status of the message.
- * <P>Type: INTEGER</P>
- */
- public static final String CANCEL_STATUS = "cl_st";
- /**
- * The thread ID of the message
- * <P>Type: INTEGER</P>
- */
- public static final String THREAD_ID = "thread_id";
- /**
- * Has the message been locked?
- * <P>Type: INTEGER (boolean)</P>
- */
- public static final String LOCKED = "locked";
- }
2、part表
mmssms.db库中的part表存储了彩信内容(文本、音乐、图象)的文件名(即上面将的app_parts下面的文件名)、文件类型信息。
其中“mid”对应着pdu表中的“_id”,“ct”是文件类型,“_data”是存储路径。
3 。 彩信文件读取
彩信附件文件的地址存储在mmssms.db的part表的_data字段,形如“/data/data/com.android.providers.telephony/app_parts/PART_1262693697763”,但在应用中读取彩信附件时,这个字段基本没什么用,因为不能直接读取这个文件。读取同样要通过ContentProvider,URI为“content://mms/part”,该URI就是对应着part表。可以使用下列代码段来读取文件:
String selection = new String("mid='" + key + "'");//这个key就是pdu里面的_id。
Cursor cur = getContentResolver().query(Uri.parse("content://mms/part"), null, selection, null, null);
if (cur.moveToFirst())
do {
int _partID = cur.getInt(cur.getColumnIndex("_id"));
String partID = String.valueOf(_partID);
Uri partURI = Uri.parse("content://mms/part/" + partID);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
is = getContentResolver().openInputStream(partURI);
byte[] buffer = new byte[256];
int len = is.read(buffer);
while (len >= 0)
{
baos.write(buffer, 0, len);
len = is.read(buffer);
}
} catch (IOException e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
这里得到的baos,就是附件文件。
- android 短信 彩信 数据库
- android 短信 彩信 数据库
- android读取短信彩信
- Android短信彩信开发手记(一):数据库相关
- Android短信彩信开发手记(一):数据库相关
- android拦截短信及彩信
- 还原Android彩信数据库
- 还原Android彩信数据库
- android插入彩信数据库
- 还原Android彩信数据库
- android插入彩信数据库
- 还原Android彩信数据库
- 还原Android彩信数据库
- Android彩信数据库分析
- Android 短信 彩信 wap push的接收
- Android中发送短信和彩信
- android 发送短信,彩信,邮件代码
- 在Android中发送短信和彩信
- 如何使用iexpress把ocx,dll等文件打包成cab文件
- 闲谈绩效考核——来自项目管理群的讨论
- [Introduction to T-shirt DIY Online System][GAL Group]
- 女人与男人
- Java之练手篇---经典Swing小弹球游戏
- android 短信 彩信 数据库
- android的listView中设置line
- OV5620的视频驱动
- [转]Nutch距离一个商用的搜索引擎有多远
- 我个人最喜欢Onerepublic的“Stop And Stare” [和旋]
- win32+opengl编程框架
- Android SDK1.0 Permission 大全访问权限许可
- rsync
- 新的起点,新的开始