Как получить получателя исходящего смс

У меня есть ContentObserver для всех SMS, отправленных / полученных на телефон, и когда 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

Теперь из этих данных я могу получить сообщение о СМС, время его отправки, но я не понимаю, как мне получить получателя. Может ли кто-нибудь помочь мне здесь? Спасибо!

2 ответа

Решение

Решение этой проблемы для любого телефона, который поддерживает контент://sms (не совсем уверен, что нет, но большинство делают), состоит в том, чтобы проверить, не является ли "адрес" нулевым, и, если это не ноль, также проверить если последний проверенный "_id" сообщения отличается, потому что content://sms иногда дает одно и то же сообщение 3-4 раза, и только один из них имеет "адрес" в качестве действительного значения, а не ноль. Вот мой окончательный код в моем 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;
    }

Этот вопрос был дан ответ здесь некоторое время назад. (Скопировано для удобства).

"content: // sms /" официально не задокументирован, и его реализация зависит от производителя устройства. нет никакого чистого способа получить любую связанную с смс информацию.

Другие вопросы по тегам