3

アプリを使用してデバイスからすべての SMS メッセージを削除しようとしていますが、何らかの理由で、一部の Samsung デバイスの通話ログに SMS ログが引き続き表示されます。

私はより「根本的な」アプローチを試み、次の URI を を使用して削除しましたContentResolver

  • content://call_log/calls
  • content://sms
  • content://sms/inbox
  • content://sms/sent
  • content://mms/inbox
  • content://mms
  • content://mms-sms
  • content://mms/address
  • content://mms/part
  • content://mms/sent
  • content://mms/outbox

削除は、次の単純なコードで行われました。

ContentResolver cr = mContext.getContentResolver() ;
cr.delete(uri, null, null) ;

その結果、すべてのテキスト メッセージがデバイスから削除され、通話ログは通話から消去されますが、SMS ログはまだ含まれています (存在しない SMS メッセージの場合)。

上記のすべてのテーブルは、プロセスの最後には実際には空ですが、通話ログが SMS データをフェッチする関連ソースが見つかりません。

この件に関する次の投稿を見つけましたが、まだ解決策がありません。

..の「logtype」列について知っていることを前もって述べておきますCallLog.Calls.CONTENT_URI。このテーブルは現在空であり、データはそこから来ていないため、関係ありません。

4

3 に答える 3

2

答えを見つけた -

Samsung の通話ログにアクセスするには、マニフェストにいくつかのアクセス許可を追加する必要があります。

<uses-permission android:name="com.sec.android.provider.logsprovider.permission.READ_LOGS" />
<uses-permission android:name="com.sec.android.provider.logsprovider.permission.WRITE_LOGS" />

あとは、コンテンツ リゾルバーを使用して、次のように content://logs/historys からログ タイプ 400、410、700、200、300、600、および 500 を削除するだけです。

    mContext = getActivity(); // Assuming that you are doing this from within a Fragment

    try
    {
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='400'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='410'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='700'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='200'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='300'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='600'", null);
        mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='500'", null);
    }
    catch(Exception exception)
    {
        exception.printStackTrace();
    }

私にとって魅力のように働きました。

于 2014-06-18T13:13:39.853 に答える
1

その結果、すべてのテキスト メッセージがデバイスから削除され、通話ログは通話から消去されますが、SMS ログはまだ含まれています (存在しない SMS メッセージの場合)。

「まだSMSログが含まれています」というあなたの指示は正確に何ですか? SMS ログは何に含まれていますか?
サムスンの電話アプリについて言及していると仮定します。もしそうなら-残念ながら、@CommonsWareが言ったように、この電話アプリは必ずしも関連するデータベースの正しい状態を表示するとは限りませんContentProvider.

このアプリは(永続的/永続的ではない)データをキャッシュし、(コンテンツプロバイダーデータベースからの)「実際のデータ」が変更されたときに更新しない可能性があります..誰が知っているか...プロセスが再起動してキャッシュする場合にのみ可能性がありますクリアされます-それ自体がリフレッシュされます...

于 2013-09-17T07:12:12.090 に答える
0

Samsung は、メッセージ ログに別のストレージを使用します。それにもかかわらず、彼らはそれらにアクセスするための特別な ContentProvider を作成しました。ソースは見つかりませんでしたが、URI: が見つかりましたcontent://logs/historys

指定した番号のログを削除する例:

try{
    context.getContentResolver().delete(Uri.parse("content://logs/historys"), CallLog.Calls.NUMBER + " like '%" + number + "'", null);
} catch (IllegalArgumentException e){
    //that mean this not samsung device
}
于 2014-04-18T11:40:48.937 に答える