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()

2 つの質問があります。

1.最新のコール ログ アイテムを取得した後、コールに応答したか不在着信したかを確認するにはどうすればよいですか?

2.通話を開始するときに onChange() が 2 回呼び出されるようですが、通話開始時に CallLog に 1 回だけアクセスしたいのですが、この 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() の 2 番目の引数を false に設定してみてください。p.3 を参照してください: https://stackoverflow.com/a/10767455/2751697

于 2013-09-18T10:25:49.773 に答える