這裏是我正在註冊ContentObserver聽發來的短信:在哪裏註冊一個必須無限期運行的ContentObserver?
SendSmsObserver smsObeserver = (new SendSmsObserver(new Handler(), context));
ContentResolver contentResolver = context.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);
這是SendSmsObserver類:
class SendSmsObserver extends ContentObserver {
private Context context;
SendSmsObserver(Handler handler, Context context) {
super(handler);
this.context = context;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
queryLastSentSMS();
}
現在的問題是,我應該把頂部三行碼?目前我正在將它寫入Activity的OnCreate方法。但通過這樣做,我每次啓動應用程序時都會調用它。我不知道這是不是好的做法。
我的要求是我應該聽我的活動生命週期外發送的短信。這是按預期工作,但我應該總是在OnCreate方法中註冊它?另外,我想在BroadcastReceiver的onReceive()中放置相同的行,以確保在重新啓動設備後偵聽。
更新:BroadcastReceiver以某種方式不註冊ContentObserver。我也嘗試在BroadcastReceiver中使用getApplicationContext()作爲上下文,但無濟於事。
在Android 7.0+上,您可以使用'JobScheduler'來監視內容更改,類似於ContentObserver。這是非常有用的,因爲你想在舊設備上不太實際。 – CommonsWare
這將是偉大的,但現在我必須針對舊設備。 – Usman
更新:BroadcastReceiver以某種方式未註冊ContentObserver。我也嘗試在BroadcastReceiver中使用getApplicationContext()作爲上下文,但無濟於事 – Usman