如何获取日历变更事件?日历观察员工作吗?

时间:2012-02-25 03:42:21

标签: android

我想在Android设备上收到日历更改事件。我尝试为它注册一个观察者,但它没有用。

我是否必须定期检索所有事件以了解更改的内容?

这是我的代码,感谢任何回复。

public class CalendarObserver extends ContentObserver 
{
    public CalendarObserver(Handler handler) {
    super(handler);
    }

    public boolean deliverSelfNotifications() {
        return true;
    }

    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.i("", "Calendar changes");
    }
}

在我的主要活动上注册,但它不起作用。

CalendarObserver observer = new CalendarObserver (new Handler());
getContentResolver().notifyChange(
    Uri.parse("content://com.android.calendar/events"), observer);

还试过......,但仍然无法正常工作

String[] projection = new String[] { "_id"};
Uri calendars = Uri.parse("content://com.android.calendar/calendars");
//Uri calendars = Uri.parse("content://com.android.calendar/events");
//Uri calendars = Uri.parse("content://calendar/calendars");
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(calendars, projection, null, null, null);
cursor.registerContentObserver(observer);

还尝试使用intent接收器,因为我从logcat看到了以下日志, 但它仍然没有用。

 I/CalendarProvider2(13444): Sending notification intent: Intent { act=android.intent.action.PROVIDER_CHANGED dat=content://com.android.calendar }

...

 CalendarReceiver receiver= new CalendarReceiver ();
 filter = new IntentFilter();
 filter.addAction("android.intent.action.PROVIDER_CHANGED");
 registerReceiver(receiver, filter);

1 个答案:

答案 0 :(得分:1)

您可以尝试以下代码,

String[] projection = new String[] { "_id" };
Uri calendars = Uri.parse("content://calendar/calendars");

Cursor managedCursor = managedQuery(calendars, projection, null, null, null);

然后使用registerContentObserver监视Cursor的更改。