Android MMS 数据库,select 神秘列中的日期行
Android MMS database, select rows by date from a mystery column
我正在访问 Android MMS 数据库以获取 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
(到 return 所有列),然后使用以下代码获取日期值:
//A mystery column of index 2
long timestamp = cursor.getLong(2) * 1000;
//It works !
Date mmsDate = new Date(timestamp);
到这里为止一切都很好。但是,现在我不需要从 MMS 数据库中获取所有行,而是需要 select 那些在特定日期之后发送的行,这意味着我需要使用 selection & selection 参数.类似于:
String selection = NAME_OF_MYSTERY_COLUMN_IDX_2 > minDate
Cursor cursor = contentResolver.query(mmsUri, projection, selection, null, null);
但是我不知道索引为 2 的列的名称是什么,我怎样才能实现我需要的?有解决方法吗?
你可以试试这个。
String selection = "date_sent" > minDate
https://developer.android.com/reference/android/provider/Telephony.BaseMmsColumns.html#DATE_SENT
除了 Date
实例化之外,您的第一个代码块是正确的。该构造函数期望时间以毫秒为单位,但 MMS table 以秒为单位保存日期。要更正此问题,只需将查询返回的值乘以 1000。
Date mmsDate = new Date(dateVal * 1000);
为了将来参考,Cursor#getColumnName()
方法将为您提供给定列索引的字符串名称。
我正在访问 Android MMS 数据库以获取 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
(到 return 所有列),然后使用以下代码获取日期值:
//A mystery column of index 2
long timestamp = cursor.getLong(2) * 1000;
//It works !
Date mmsDate = new Date(timestamp);
到这里为止一切都很好。但是,现在我不需要从 MMS 数据库中获取所有行,而是需要 select 那些在特定日期之后发送的行,这意味着我需要使用 selection & selection 参数.类似于:
String selection = NAME_OF_MYSTERY_COLUMN_IDX_2 > minDate
Cursor cursor = contentResolver.query(mmsUri, projection, selection, null, null);
但是我不知道索引为 2 的列的名称是什么,我怎样才能实现我需要的?有解决方法吗?
你可以试试这个。
String selection = "date_sent" > minDate
https://developer.android.com/reference/android/provider/Telephony.BaseMmsColumns.html#DATE_SENT
除了 Date
实例化之外,您的第一个代码块是正确的。该构造函数期望时间以毫秒为单位,但 MMS table 以秒为单位保存日期。要更正此问题,只需将查询返回的值乘以 1000。
Date mmsDate = new Date(dateVal * 1000);
为了将来参考,Cursor#getColumnName()
方法将为您提供给定列索引的字符串名称。