1

OK、みんな、SMSを取得するための私のコードは次のとおりです。

Cursor cursor = getContentResolver().query(Uri.parse(uri),
                null, CallLog.Calls.DATE + " > " + lastSmsTime, null,
                CallLog.Calls.DATE + " ASC");

タイプは次のとおりです。

"content://sms/inbox"
"content://sms/sent"

そして電話の場合:

String[] projection = new String[] { CallLog.Calls.NUMBER,
                CallLog.Calls.TYPE, CallLog.Calls.DURATION, CallLog.Calls.DATE };
Cursor managedCursor = getContentResolver().query(
                CallLog.Calls.CONTENT_URI, projection,
                CallLog.Calls.DATE + " > " + lastCallTime, null,
                CallLog.Calls.DATE + " ASC");

まず第一に、これは文書化されていないプロバイダーであることを知っています(ご覧のとおり、私は別のプロバイダーの列定数を使用しています)。

面白いことに、これはいくつかの2.3.xデバイスで正常に機能しています。しかし今、私はこれをGalaxy S II(ICS 4.0.3)で試しました。これで、すべてのSMSが通話プロバイダーで複製されます。

誰かがこの問題に遭遇しましたか?

UPD私はここで 同じ質問を見つけました、解決策を探し続けてください。

私が今知っているUDD2から、Samsungはすべてを1つのログに保存するようになったので、ログアプリケーションをリバースエンジニアリングする方法を見つけようとします。

とにかく、まだSMSと通話を分離するための解決策を探しています。

4

3 に答える 3

1

わかりました、それが解決策かもしれないので、私はそれを投稿しています:サムスンのログプロバイダーにはたくさんの列があります、その中には

logtype

私が見る限り、これは通話の場合は100、SMSの場合は300、MMSの場合は200です。

メーカーを検出することも可能です:

文字列man=android.os.Build.MANUFACTURER;

したがって、samsungデバイスの場合、ログタイプをチェックする別のコードが必要です

于 2012-07-03T12:26:24.280 に答える
0

これを自分で見ているだけです。より一般的な解決策は、期間が0のすべての着信コールエントリを削除することです。

于 2012-12-02T14:37:40.587 に答える
0
Cursor query = this.managedQuery(
        CallLog.Calls.CONTENT_URI, null, CallLog.Calls.TYPE + " in ('3','5') OR " + CallLog.Calls.DURATION + ">0 ", null, null);
//Calls.Type is 3 for Missed Calls and 5 for Cancelled Calls and **Calls.Duration** is 0 for Message, Missed Calls and Cancelled Calls

このコードは私にとってはうまくいきました。私は他の3〜4のリンクにアクセスしましたが、それらすべてがCallLogからメッセージのログを削除することを提案しました。これはおそらく、ログの書き込み/削除を行わずに音声通話ログのみを取得する唯一の方法です。

于 2014-07-16T14:06:10.430 に答える