-2

電話で送受信されるすべての SMS 用の ContentObserver があります。SMS が送信されると、カーソルから取得するデータは次のようになります。

01-09 09:52:13.523: I/WOWOW(1830): _id: 213
01-09 09:52:13.523: I/WOWOW(1830): thread_id: 1
01-09 09:52:13.523: I/WOWOW(1830): address: null
01-09 09:52:13.523: I/WOWOW(1830): person: null
01-09 09:52:13.523: I/WOWOW(1830): date: 1326120733305
01-09 09:52:13.523: I/WOWOW(1830): date_sent: 0
01-09 09:52:13.523: I/WOWOW(1830): protocol: null
01-09 09:52:13.527: I/WOWOW(1830): read: 1
01-09 09:52:13.527: I/WOWOW(1830): status: -1
01-09 09:52:13.527: I/WOWOW(1830): type: 3
01-09 09:52:13.527: I/WOWOW(1830): reply_path_present: null
01-09 09:52:13.527: I/WOWOW(1830): subject: null
01-09 09:52:13.527: I/WOWOW(1830): body: Hello i am testing
01-09 09:52:13.527: I/WOWOW(1830): service_center: null
01-09 09:52:13.527: I/WOWOW(1830): locked: 0
01-09 09:52:13.527: I/WOWOW(1830): error_code: 0
01-09 09:52:13.527: I/WOWOW(1830): seen: 0

さて、このデータから、SMS のメッセージ、送信時刻を取得できますが、受信者を取得する方法がわかりません。ここで誰か助けてくれませんか?ありがとう!

4

2 に答える 2

1

この質問は、しばらく前にここで回答されました。(便宜上コピー)。

「content://sms/」は正式に文書化されておらず、その実現はデバイスの製造元次第です。SMS 関連の情報を取得するクリーンな方法はありません。

于 2012-01-09T15:33:58.960 に答える
1

これに対する解決策は、content://sms をサポートしているすべての電話 (どちらがサポートしていないかはよくわかりませんが、ほとんどの場合サポートしています) では、「アドレス」が null でないかどうかを確認し、null でない場合はそれも確認することです。メッセージの最後にチェックされた「_id」が異なる場合、 content://sms は同じメッセージを3〜4回返す傾向があり、そのうちの1つだけが実際の値として「アドレス」を持ち、nullではないためです。ContentObserver onChange の最終的なコードは次のとおりです。

Cursor cur = contentResolver.query(Uri.parse("content://sms"), null, null, null, null);
    cur.moveToNext();
    String id = cur.getString(cur.getColumnIndex("_id"));

    final String user_id = settings.getString("user_id", "0");

    if(!cur.getString(cur.getColumnIndex("address")).equals("null") && !id.equals(lastId)) {
        for(int i =0; i < cur.getColumnNames().length; i++) {
            Log.i("WOWOW", cur.getColumnName(i) + ": " + cur.getString(cur.getColumnIndex(cur.getColumnName(i))));
        }
        Log.i("WOWOW", "*****************************************************");
        lastId = id;
    }
于 2012-01-09T22:20:18.207 に答える