Не удается получить данные MMS

Контекст

Я пытаюсь получить данные MMS из Android, я могу считать MMS изcontent://mms/, Но когда я хочу, чтобы получить данные MMS, то это пусто.

Проблема

Сначала я считаю 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);

И каждый раз мой курсор пуст.


Получение MMS 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)вышеуказанный код (где моя проблема), используя идентификатор, указанный в параметре.

Вопрос

Правильно ли я запрашиваю поставщика контента ? Или я использую не того провайдера Uri? Возможно, Uri части MMS отличается в зависимости от устройства, если да, то как я могу всегда указывать на правильный Uri ?

1 ответ

  1. Не уверен, что вы уже нашли ответ.
    Вот что у меня есть, и это работает (для меня):

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