Реагировать на входящие SMS/MMS, соблюдая базу данных SMS/MMS по умолчанию.

Есть ли способ реагировать на изменения в SMS/MMS ContentProvider (даже когда приложение неактивно).

Я хочу работать с данными сообщений по мере их поступления, а также с тем, как их использует приложение Messenger по умолчанию.

Если я использую BroadcastReceiver с Telephony.Sms.Intents.SMS_RECEIVED_ACTION IntentFilter, я получаю необработанное сообщение ДО того, как его получит SMS ContentProvider.

И я не могу использовать ContentObserver, потому что хочу иметь возможность реагировать на сообщения, когда мое приложение неактивно.


person Paul    schedule 29.03.2016    source источник
comment
Вы в основном правы, за исключением того, что сообщение, полученное в BroadcastReceiver, не имеет поля thread_id. Я предполагаю, что приложение для обмена сообщениями по умолчанию создает это поле.   -  person Paul    schedule 30.03.2016
comment
Да, я думал о Service + ContentObserver, но это звучит как огромная боль батареи/памяти. Сохранение номера и тела на самом деле не такая уж и плохая идея, но это становится проблемой, если кто-то любит начинать разговор с эй. Добавление метки времени может сделать эту работу.   -  person Paul    schedule 30.03.2016
comment
Я действительно решил это, используя NotificationListenerService. Если появляется уведомление из приложения для обмена сообщениями по умолчанию, я запрашиваю базу данных.   -  person Paul    schedule 30.03.2016
comment
Хотя, если я хочу также делать что-то с отправленными SMS, тогда лучшим вариантом может быть Service + ContentProvider. Как вы думаете, как это делает Pushbullet?   -  person Paul    schedule 30.03.2016