В настоящее время я запрашиваю базу данных 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.