语境
我正在尝试从 Android 检索彩信数据,我可以从中计算彩信,content://mms/
但是当我想获取彩信数据时,它是空的。
问题
首先,我这样计算彩信:
Uri uri = Telephony.Mms.CONTENT_URI; // content://mms/
Cursor cursor = contentResolver.query(uri, null, null, null, null);
int count = cursor.getCount();
假设我有 3 个 MMS,计数等于 3。这里没问题。
现在我想从每个 MMS 中检索数据,我发现(这里和这里)我必须查询content://mms/part
提供者,这就是我所做的。问题是这个光标总是空的,我尝试了很多不同的方法:
Uri uri = Uri.parse("content://mms/part");
String selection = Telephony.Mms.Part.MSG_ID + " = " + id;
Cursor cursor = contentResolver.query(uri, null, selection, null, null);
// OR
Uri uri = Uri.parse("content://mms/part/" + id);
Cursor cursor = contentResolver.query(uri, null, null, null, null);
// OR
Uri uri = Uri.parse("content://mms/" + id "/part");
Cursor cursor = contentResolver.query(uri, null, null, null, null);
每次,我的光标都是空的。
获取彩信 ID:
Cursor cursor= contentResolver.query(Telephony.Mms.CONTENT_URI, new String[]{"*"}, null, null, null);
if (cursor!= null) {
if (cursor.getCount() > 0) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
sms = createMmsFromCursor(cursor);
cursor.moveToNext();
}
cursor.close();
}
}
然后是createMmsFromCursor(cursor)
:
private final MMS createMmsFromCursor(Cursor cursor) {
long id = cursor.getLong(cursor.getColumnIndex(Telephony.Mms._ID));
// ...
Map.Entry partValues = getDataFromMms(id);
// ...
return mms;
}
将getDataFromMms(id)
使用参数中给出的 id 调用上面的代码(我的问题所在)。
问题
我是否正确查询内容提供者?还是我使用了错误的提供商Uri
?也许彩信部分Uri 因设备而异,如果是这样,我怎么能总是指向正确的 Uri ?