ContentObserver, използван за SMS

Опитвам се да извлека изпратения SMS. Знам, че няма BroadcastReciver за това. Така че открих, че мога да използвам ContentObserver, за да слушам промените в db.

Как мога да приложа това? Целта ми е да получавам само новите изпратени sms и да ги изпращам чрез POST в DB

Благодаря


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


Отговори (1)


Ето фрагмент от код, за да направите това. Ключът е да използвате селекция, която търси само „тип = изходящи съобщения“.

Освен това, тъй като DB със съдържание може да се задейства от всяка промяна, следете (по някакъв начин) какво вече е обработено.

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