Как обновить ветку разговоров по смс на android?

Я хотел обновить столбцы «message_count» и «snippet» цепочки sms-разговоров, используя это content: «content: // mms-sms / chatations». Поскольку количество фрагментов и сообщений не обновляется при удалении SMS из цепочки беседы. Но я получил это сообщение об ошибке: «MmsSmsProvider не поддерживает удаление, вставку или обновление этого URI». Ниже мой код:

ContentValues values = new ContentValues();
values.put("message_count", ent.getValue().getCount());
values.put("snippet", ent.getValue().getSnip());

Uri conUri = Uri.parse("content://mms-sms/conversations");
getContentResolver().update(conUri, values, null, null);

Я тоже пробую вот так:

Uri conUri = Uri.parse("content://mms-sms/conversations" + "/" + threadid);
getContentResolver().update(conUri, values, null, null);

Но я получил еще одно сообщение об ошибке: такого столбца нет: message_count: при компиляции: UPDATE pdu SET message_count = ?, snippet =? ГДЕ thread_id = 334

Спасибо за любую помощь


person breezing    schedule 19.08.2012    source источник


Ответы (1)


Невозможно напрямую обновить счетчик, фрагмент и т. Д. Потока. Но я могу помочь вам с вашей реальной проблемой. На самом деле в коде Android есть ошибка, которая является корнем вашей проблемы. Когда вы пытаетесь удалить следующим образом -

getContentResolver().delete("content://sms/", "_id=?", new String[] {id});

Android не обновляет ветку, связанную с этим смс.

Решение состоит в том, чтобы сделать это

getContentResolver().delete("content://sms/" + id, null, null);

Для тех, кому интересно, в чем заключается ошибка - код Android делает что-то вроде этой глупости, когда вы удаляете с помощью метода 1 -

  1. Удалить все сообщения, указанные в запросе.
  2. Получите все цепочки бесед, связанные с сообщениями, заданными в запросе, и обновите их. Ух ты ?! Шаг 1 просто удалил сообщения, заданные запросом, поэтому шаг 2 всегда будет возвращать нулевой набор для потоков, связанных с этим сообщением, поскольку все сообщения уже удалены.

Надеюсь это поможет.

person Pinal    schedule 08.09.2012
comment
это не ошибка, sms / mms URI не являются частью официального публичного API и поэтому не должны работать как другие URI. Кроме того, то, что вы дали в качестве описания ошибки, неверно. таблица threads обновляется не через URI, а через триггеры в sqlite db. - person vikki; 15.09.2012
comment
привет @vikki, у меня такая же проблема с обновлением sms/conversations, как это обновить? вы знали? после того, как я удалю sms из sms Uri, я не могу получить фрагмент из разговоров, потому что он нулевой, я пробовал обновить его, но он не возвращает такой столбец, знаете ли вы, как это исправить? - person Shayan Pourvatan; 13.04.2014
comment
@shayanpourvatan, может быть, я не понимаю вашу ситуацию, вы говорите, что после удаления sms вы добавляете еще одно, а затем после добавления этого столбец snippet имеет значение null? - person vikki; 13.04.2014
comment
@vikki спасибо за ответ, моя ситуация что-то вроде восстановления, после восстановления одного смс столбец сниппета равен нулю. Я просто удаляю смс из таблицы смс, но я думаю, что это тоже удалено из разговора, и я не могу обновить это значение, - person Shayan Pourvatan; 13.04.2014
comment
@shayanpourvatan вам нужно убедиться, что смс действительно восстанавливается / вставляется. Я бы посоветовал вам проверить базу данных напрямую с помощью клиента sqlite с графическим интерфейсом. Лично я использую этот плагин для Firefox. База данных sqlite, в которой хранятся SMS / MMS, находится по адресу /data/data/com.android.providers.telephony/databases/ и называется mmssms.db. Просмотр этой базы данных даст вам более глубокое понимание того, как смс / ммс работает в Android. - person vikki; 13.04.2014
comment
@shayanpourvatan Наконец, я должен указать, что пока вставляется sms, гарантированно создается фрагмент, потому что он полагается на триггер sql, а не на android или ваш код. Дайте мне знать, если вы все еще застряли. - person vikki; 13.04.2014
comment
@vikki Я успешно удалил из базы данных и сохранил все SMS-сообщения в своей базе данных (то же самое с таблицей SMS), я успешно восстановил это в таблице SMS из моей таблицы, но фрагмент разговора имеет значение null, а thread_id не равен null, я могу игнорировать эта проблема в моем приложении, но я хочу исправить это, возможно, другое приложение хочет использовать это - person Shayan Pourvatan; 13.04.2014
comment
@shayanpourvatan должно быть что-то не так с тем, как вы делаете вставку, смс, скорее всего, не хранится должным образом. Могу я увидеть код? - person vikki; 14.04.2014
comment
да @vikki, ты прав, спасибо за помощь, я разобрался со своей проблемой - person Shayan Pourvatan; 14.04.2014