我正在尝试阅读过去 14 天的 android 短信消息,但是从 Cursor 读出所有消息似乎需要永恒的时间,因此我将其限制为似乎没有按时间顺序排列的第 100 条消息。
为了仅提取联系人和消息,对 esms 数据进行有效查询的任何想法?
我的代码:
Uri uriSMSURISent = Uri.parse("content://sms/sent"); // get the sms data for sent
Cursor curSent = getContentResolver().query(uriSMSURISent, null, null, null,null);
int i=0;
while (curSent.moveToNext() && i<100)
{
String from = curSent.getString(2);
if(sentHashmap.containsKey(to))
{
String cumulativeMessage = sentHashmap.get(to);
sentHashmap.put(from, cumulativeMessage+ " " +curSent.getString(12));
}
else
sentHashmap.put(from, curSent.getString(12));
i++
Run Code Online (Sandbox Code Playgroud)
我建议您使用 ContentResolver 查询来仅获取您感兴趣的记录。您可以选择不同的列,指定 where 子句甚至排序..
http://developer.android.com/guide/topics/providers/content-provider-basics.html
// Queries the user dictionary and returns results
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI, // The content URI of the words table
mProjection, // The columns to return for each row
mSelectionClause // Selection criteria
mSelectionArgs, // Selection criteria
mSortOrder); // The sort order for the returned rows Table 2 shows how the arguments to
query(Uri,projection,selection,selectionArgs,sortOrder) match an SQL
SELECT statement:
// column names for above provider:
0: _id
1: thread_id
2: address
3: person
4: date
5: protocol
6: read
7: status
8: type
9: reply_path_present
10: subject
11: body
12: service_center
13: locked
Run Code Online (Sandbox Code Playgroud)
现在你只需要用一个好的 where 子句来查询它:
long date = new Date(System.currentTimeMillis() - 14L * 24 * 3600 * 1000).getTime();
Cursor curSent = getContentResolver().query(uriSMSURISent, null,"date" + ">?",new String[]{""+date},"date DESC");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |