Подтвердить что ты не робот

Запрос MMS возвращает только размер отправляемых вложений

В настоящее время я запрашиваю базу данных Android sms/mms для получения всех сообщений MMS, полученных и отправленных. Все работает нормально, но я заметил, что столбец m_size имеет только сообщение MMS, которое было отправлено (не получено).

Здесь запрос:

final String[] projection = new String[]{ "*" };
Uri uri = Uri.parse("content://mms");
Cursor query = _activity.getContentResolver().query(uri, projection, null, null, null);

используя это, я могу получить все байты сообщения, но в настоящее время он возвращает null для полученных MMS-сообщений.

if (query.moveToFirst())
{
    do
    {
        // ...

        Integer size = query.getInt(query.getColumnIndex("m_size"));
    }
    while (query.moveToNext());
}

Без вычисления размера столбца "data" сообщения, что-то не так с моим запросом/по какой-либо причине, почему m_size вернет null для MMS сообщений, которые были получены (и имеют действительное изображение вложение)?

Примечание. Не уверен, что в предыдущих API-интерфейсах что-то изменилось, поскольку этот API не документирован. В настоящее время я тестирую/разрабатываю Nexus 5X с использованием API 23.

4b9b3361

Ответ 1

Из того, что я вижу, нет ничего плохого в вашем запросе.

Существует несколько причин, по которым m_size может быть нулевым. null - это значение по умолчанию для этого столбца при создании таблицы, см. MmsSmsDatabaseHelper. По умолчанию приложение SMS, вероятно, вызывает PduPersister.persist при сохранении PDU, а размер сообщения вставляется . Тот факт, что вы сохранили извлеченные PDU, но не m_size, указывает, что заголовок не содержит этого значения. Если у вас есть внедренное устройство, вы можете проверить содержимое заголовка с помощью tcpdump и Wireshark. Я предполагаю, что приложение SMS по умолчанию постоянно сохраняло PDU и части, но можно проверить тип сообщений MMS в папке "Входящие". При получении MMS вы сначала получите NOTIFICATION-IND, который уведомляет, что есть MMS для загрузки, и содержит некоторую базовую информацию. Это должно сохраняться приложением по умолчанию. Затем он должен загрузить полное MMS и сохранить RETRIEVE-CONF. Размер сообщения является частью NotificationInd. Когда приложение SMS сохраняет RETRIEVE-CONF, оно может перезаписать/удалить NOTIFICATION-IND, а m_size будет потерян. Чтобы проверить это, вы можете отключить автоматическую загрузку MMS (если приложение поддерживает его) или просто отключить любые данные, поскольку уведомление будет доставлено в виде сообщения WAP Push.