0

语境

我正在尝试从 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 ?

4

1 回答 1

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

于 2017-07-21T19:24:37.537 回答