Запрос 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.

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

Существует несколько причин, по которым 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.

Intereting Posts
Как выбрать действие или фрагмент, если возможны оба сценария? Невозможно повернуть эмулятор с помощью android 4.4 Как обновить текст холста, а не перерисовывать холст Запросы HTTP HTTP, работающие в симуляторе, но не на изнаночном устройстве Папки для Android Studio Добавление фрагмента поверх другого фрагмента по проблемеClickListener Не удалось установить пространство имен по умолчанию в Android XmlSerializer Моя реализация индексации приложений не работает Android parse push-уведомление и новый GCM генерируют неправильный токен устройства и не активируют уведомление о синтаксическом разборе Ошибка удаления TextInputLayout при удалении сообщения об ошибке не удаляется Выравнивание текстовых элементов в TableRow Float или Double? Создание выпадающего меню из файла .json Вычислить точку центра дуги, зная, что это начальная и конечная градусы Когда IntentService начинает запускать объект приложения?