2012-02-25 31 views
1

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

回答

1

你可以試試下面的代碼,

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

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

,然後用registerContentObserver監視改變光標。