0

このコンテンツを使用して、SMS 会話スレッドの「message_count」列と「snippet」列を更新したかった:「content://mms-sms/conversations」。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);

しかし、私が得たのは別のエラーメッセージです: no such column: message_count: 、コンパイル中: UPDATE pdu SET message_count=?,snippet=? WHERE スレッド ID=334

助けてくれてありがとう

4

1 に答える 1

4

スレッドのカウント、スニペットなどを直接更新する方法はありません。しかし、私はあなたの実際の問題であなたを助けることができます. 実際には Android コードにバグがあり、これが問題の原因です。次の方法で削除しようとすると -

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

Android は、その SMS に関連付けられたスレッドを更新しません。

解決策はこれを行うことです

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

バグが何であるかに興味がある人のために-方法1を使用して削除すると、Androidコードはこのような愚かなことをします-

  1. クエリで指定されたすべてのメッセージを削除します。
  2. クエリで指定されたメッセージに関連付けられているすべての会話スレッドを取得して更新します。なにこれ?! ステップ 1 はクエリで指定されたメッセージを削除しただけなので、ステップ 2 は、すべてのメッセージが既に削除されているため、これらのメッセージに関連付けられたスレッドに対して常に null セットを返します。

お役に立てれば。

于 2012-09-08T18:02:20.813 に答える