如何获取日历更改事件?日历观察员是否工作?

问题描述:

我想在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); 

还试图用意图接收器,因为我看到了下面的日志从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); 

你可以试试下面的代码,

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

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

,然后用registerContentObserver监视改变光标。