Android MMS数据库,从神秘列中按日期选择行

时间:2015-03-05 10:29:00

标签: android sql sqlite android-sqlite

我正在访问Android MMS数据库以获取彩信的日期:

Uri mmsUri = Uri.parse("content://mms/");
ContentResolver contentResolver = getContentResolver();
String[] projection = {"_id", "date"};
Cursor cursor = contentResolver.query(mmsUri, projection, null, null, null);

long dateVal = cursor.getLong(cursor.getColumnIndex("date"));
//This date is always 1970
Date mmsDate = new Date(dateVal);

但是我得到的日期总是1970年。然后,我找到了answer。我需要将projection设置为null(以返回所有列),然后使用以下代码获取日期值:

//A mystery column of index 2
long timestamp = cursor.getLong(2) * 1000;
//It works !
Date mmsDate = new Date(timestamp);

直到这里的一切都很好。但是,现在我需要选择那些在特定日期之后发送的行,而不是从MMS数据库中选择所有行,这意味着我需要使用选择&选择论点。类似的东西:

String selection = NAME_OF_MYSTERY_COLUMN_IDX_2 > minDate
Cursor cursor = contentResolver.query(mmsUri, projection, selection, null, null);

但是我不知道索引为2的列的名称是什么,我怎么能实现我需要的呢?有解决方法吗?

2 个答案:

答案 0 :(得分:1)

您的第一个代码块是正确的,Date实例化除外。该构造函数需要以毫秒为单位的时间,但MMS表以秒为单位保留日期。要更正此问题,只需将查询返回的值乘以1000即可。

Date mmsDate = new Date(dateVal * 1000);

为了将来参考,Cursor#getColumnName()方法将为您提供给定列索引的String名称。

答案 1 :(得分:0)

你可以试试这个。

String selection =  "date_sent" > minDate

https://developer.android.com/reference/android/provider/Telephony.BaseMmsColumns.html#DATE_SENT