私はこれについて何週間も苦労してきたので、ここで誰かが私に明確にしてくれることを願っています.
私が取り組んでいるプロジェクト(ICS以前)には、会社のサーバーにログオンし、将来の仕事のスケジュールを取得し、これを電話の別のカレンダーに保存することが含まれています。このカレンダーは、すべての主要なカレンダー アプリ (ジョルテ、ビジネス カレンダー、スムース カレンダー++) で表示できる必要があります。スケジュールを解析して電話の SQLite データベースに保存しました。しかし、私の苦労は、そこから別のローカル カレンダーを作成し、そこにすべてのイベントを保存することです。これにはアカウントを作成する必要があると思いました(電話で他のアカウントを台無しにしないためです。それはコードでうまく機能しました:
AccountManager man = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account acc = new Account("myCalendar", "com.lumabyte.mycalendar");
しかし、そのアカウントでカレンダーを作成するのは非常に簡単だと思いました:
ContentValues calendar = new ContentValues();
calendar.put("_sync_account", "myCalendar"); // My account
calendar.put("_sync_account_type","com.lumabyte.mycalendar");
calendar.put("name", "myCalendar");
calendar.put("displayName", "myCalendar");
calendar.put("hidden",0);
calendar.put("color",0xFF008080);
calendar.put("access_level", 700);
calendar.put("sync_events", 1);
calendar.put("timezone", "Europe/Paris");
calendar.put("ownerAccount", sync_account);
Uri calendarUri = Uri.parse(getCalendarUriBase() + "calendars");
this.getContentResolver().insert(calendarUri, calendar);
関数 getCalendarUriBase():
private String getCalendarUriBase() {
String calendarUriBase = null;
Uri calendars = Uri.parse("content://calendar/calendars");
Cursor managedCursor = null;
try {
managedCursor = this.managedQuery(calendars, null, null, null, null);
} catch (Exception e) {
// eat
}
if (managedCursor != null) {
calendarUriBase = "content://calendar/";
} else {
calendars = Uri.parse("content://com.android.calendar/calendars");
try {
managedCursor = this.managedQuery(calendars, null, null, null, null);
} catch (Exception e) {
// eat
}
if (managedCursor != null) {
calendarUriBase = "content://com.android.calendar/";
}
}
managedCursor.close();
return calendarUriBase;
}
マニフェストには次が含まれます。
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MAMAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CALENDAR">
<uses-permission android:name="android.permission.WRITE_CALENDAR">
私のauthenticator.xmlは次のようなものです:
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.lumabyte.mycalendar"
android:icon="@drawable/icon"
android:smallIcon="@drawable/icon"
android:label="@string/authenticator_label"
/>
エラー メッセージは表示されませんが、アカウントのみが作成され、カレンダーは作成されません。コードに小さなエラーがありますか、それとも概念全体を誤解していますか? 私は、ICS より前に API がなく、リスクが伴うことを知っています。しかし、とにかくそれを行う必要があります。できるだけ多くの電話で安定していることが望ましいです。どんな助けや例も大歓迎です。
ICS がそのためのパブリック API を持っていることを理解しているので、後で ICS と連携します。
r