无法检索彩信数据

时间:2017-01-17 14:18:25

标签: java android android-contentprovider android-cursor android-mms

上下文

我正在尝试从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.这里没问题。

现在我想从每个彩信中检索数据,我发现(herehere)我必须查询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?

1 个答案:

答案 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()