ContentObserver используется для SMS

Я пытаюсь извлечь отправленное SMS. Я знаю, что для этого нет BroadcastReciver. Итак, я обнаружил, что могу использовать ContentObserver для прослушивания изменений в базе данных.

Как я могу реализовать это? Моя цель - получить только новое отправленное смс и отправить его через POST в БД

Спасибо


person Marc Ortiz    schedule 01.07.2012    source источник


Ответы (1)


Вот фрагмент кода для этого. Ключевым моментом является использование выбора, который ищет только «тип = исходящие сообщения».

Кроме того, поскольку база данных содержимого может быть запущена любым изменением, отслеживайте (каким-то образом) то, что уже было обработано.

int THREAD_ID = 0, ADDRESS = 1, DATE = 2, TYPE = 3, BODY = 4, INCOMING = 1, OUTGOING = 2, UNKNOWN = -1;

String[] smsProjection = new String[] {"thread_id", "address", "date", "type", "body"};

ContentResolver cr = context.getContentResolver();

Cursor cursor = context.getContentResolver().query(uri, smsProjection, "type = ? AND date > ?",new String[]{Integer.toString(OUTGOING), Long.toString(lastOutgoingSmsTime)}, null);
person PVS    schedule 02.07.2012
comment
Привет @PVS, где ты берешь значение для lastOutgoingSmsTime? - person midhunhk; 28.07.2015
comment
lastOutgoingSmsTime — это переменная приложения, которая определяет, что новое означает для приложения. Каждый раз, когда вы извлекаете набор SMS, просто обновляйте эту метку времени для следующего запроса. Вам придется как-то справиться с этим в самый первый раз. - person PVS; 30.07.2015
comment
понятно. Я сохранил messageId в предпочтениях, когда сообщение отправляется. затем я сравниваю идентификаторы сообщений, чтобы проверить, являются ли они новыми. - person midhunhk; 31.07.2015