我正在尝试从Android检索彩信数据,我可以从content://mms/
计算彩信,但是当我想获取彩信数据时,它就是空的。
首先我像这样算MMS:
Uri uri = Telephony.Mms.CONTENT_URI; // content://mms/
Cursor cursor = contentResolver.query(uri, null, null, null, null);
int count = cursor.getCount();
假设我有3个彩信,则计数等于3.这里没问题。
现在我想从每个彩信中检索数据,我发现(here和here)我必须查询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
?也许 MMS部分 Uri根据设备而有所不同,如果是这样,我怎样才能始终指向正确的Uri?
答案 0 :(得分:0)
不确定您是否找到了答案。 这就是我所拥有的,并且它(对我来说)有效:
Uri uriMms = Uri.parse("content://mms/");
final String[] projection = new String[]{"*"};
Cursor cursor = contentResolver.query(uriMms, projection, null, null, null);
String id = cursor.getString(cursor.getColumnIndex("_id"));
String selectionPart = "mid=" + id;
Uri uri = Uri.parse("content://mms/part");
Cursor cursor2 = getContentResolver().query(uri, null, selectionPart, null, null);
然后执行cursor2.moveToFirst()