0

我有一个用于更改通话记录的内容观察者

class CallContentObserver extends ContentObserver {

    Context context;

    public CallContentObserver(Handler handler, Context context) {
        super(handler);
        this.context = context;
    }


    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);

        Cursor c = context.getContentResolver()
                              .query(CallLog.Calls.CONTENT_URI,null,null, null, "Calls._ID DESC");

       mCursor.moveToFirst();

        //How do I know the call is answered or missed ?

如上所示,在onChange()回调中,我想获取导致此onChange()事件被触发的最新通话记录。

我有两个问题:

1.拿到最新的通话记录后,如何知道来电是接听还是未接?

2. onChange() 似乎在我开始通话时被调用了两次,但我只想在通话开始时访问一次CallLog,如何摆脱这个2次触发的问题onChange()

4

1 回答 1

0

1.

Integer type=cursor.getInt(cursor.getColumnIndexOrThrow(CallLog.Calls.TYPE));
switch(type){
    case CallLog.Calls.INCOMING_TYPE:
       /// do something
       break;
    case CallLog.Calls.OUTGOING_TYPE:
       /// do something
       break;
    case CallLog.Calls.MISSED_TYPE:
       /// do something
       break;
}

2.尝试将 registerContentObservable() 中的第二个参数设置为 false,查看第 3 页: https ://stackoverflow.com/a/10767455/2751697

于 2013-09-18T10:25:49.773 回答