我想在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);
答案 0 :(得分:1)
您可以尝试以下代码,
String[] projection = new String[] { "_id" };
Uri calendars = Uri.parse("content://calendar/calendars");
Cursor managedCursor = managedQuery(calendars, projection, null, null, null);
然后使用registerContentObserver监视Cursor的更改。