使用内容观察器更新呼叫日志的问题

时间:2019-05-09 08:44:16

标签: android

我有一个fragment,我阅读了通话记录并显示在其中的recyclerview中。 我使用内容观察器来应用呼叫日志更新。

问题是,内容更改方法的内容观察者不会在传出呼叫中调用,而只会在传入和未接呼叫中调用。 请帮助解决问题,同时向我展示更新通话记录并将其显示在recyclerview中的最佳方法。 这是我的内容观察器类,以及我如何注册和注销它

public class CallLogChangeObserverClass extends ContentObserver
{
    public CallLogChangeObserverClass(Handler handler, Context ct) {
        super(handler);
            // TODO Auto-generated constructor stub
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }

    public void onChange(boolean selfChange) {
        // Toast.makeText(getApplicationContext(), "call log changed", Toast.LENGTH_LONG).show();
    }

我在这里注册内容查看器

@Override
public void onResume() {
    super.onResume();
    getActivity()
        .getContentResolver()
        .registerContentObserver(CallLog.Calls.CONTENT_URI, true, callLogchangeevents);
}

并注销:

@Override
public void onPause() {
    super.onPause();
    getActivity()
        .getContentResolver()
        .unregisterContentObserver(callLogchangeevents);
}

1 个答案:

答案 0 :(得分:0)

问题解决了。以防万一有人遇到相同的问题,问题是我在onPause()方法中注销了观察者,所以在观察者无法检测到日志更改之前进行调用时,就取消了注册。我将unregister方法移到片段的detach方法上,并解决了问题。