目的: Google カレンダーのイベントをローカルの Android カレンダーと同期する同期アダプターを作成する (サーバーからデバイス - 一方向のみ)。アンドロイド版:フロヨ
デバッグ手順:
- 過去の非定期的なイベント (1 か月前) が Google カレンダーから読み込まれます
- Androidカレンダーにローカルに挿入します(作成したカレンダーエントリ)
- イベントはイベント テーブルに正常に挿入されますが、インスタンス テーブルの対応するエントリは作成されません
- calendarmetadata テーブルの値を mininstance=0 および maxinstance="event's end date in millis" に更新します (コマンド プロンプトで sqlite3 ツールを使用)。
- 同じイベントをローカルに挿入してみます
- 今回は、イベントがイベント テーブルに正常に挿入され、インスタンス テーブルの対応するエントリも作成されます
CalendarProvider.java と Calendar.java のソース コードを調べてさらに調べたところ、次のことが明らかになりました。
- Calendars テーブルに行を挿入した後、mininstance は今日の日付に設定され、maxinstance は 7 日または 15 日先に設定されます。たとえば、今日が 10 月 19 日である場合、カレンダー エントリを作成し、カレンダー アジェンダ アクティビティ セット mininstance= にアクセスします。 19-Oct (ミリ秒) および maxinstance=26-Oct (ミリ秒)。
- 上記のステップ 3 で、コンテンツ プロバイダーがイベントを挿入するときに、mininstance 値と maxinstance 値を調べて、指定されたイベントのインスタンスを展開し、インスタンス テーブルに挿入します。イベントの開始時刻が mininstance 値より前であるため (イベントが 1 か月前であるため)、コンテンツ プロバイダーは対応するインスタンス エントリを作成しません。
コードから calendarmetadata とインスタンス テーブルに直接書き込むことができない場合、froyo バージョンの Android デバイスで古いイベントをローカル カレンダーと同期するにはどうすればよいですか?