2012-09-24 5 views
8

Androidアプリ内から新しいカレンダーを作成する方法をすべて確認しました。私が見た唯一の方法は、最新のAPIバージョンで新しいCalendar APIを使用することですが、これはCalendarContract.ACCOUNT_TYPE_LOCALを使用する場合にのみ有効です。 Google Calendarと同期して、ユーザーのGoogleアカウントに添付されたカレンダーを作成することはできません。オンラインカレンダーリストGoogle Calendarには表示されません。Android新しいカレンダーを追加する

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, 
    CalendarContract.ACCOUNT_TYPE_LOCAL); 

アカウントのアカウントタイプを使用しようとしましたが、これは機能しません。しかし、それはどんなエラーも生成していないようです。結果は元気です。ここで

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType); 

Calendar APISYNCADAPTER(コメントアウトアカウントの種類)を使用して新しいローカルカレンダーを追加するための完全なコードです。私がやろうとしていることが可能なのか誰にも分かりますか?

AccountManager manager = AccountManager.get(context); 
Account[] accounts = manager.getAccountsByType("com.google"); 

String accountName = ""; 
String accountType = ""; 

for (Account account : accounts) { 
    accountName = account.name; 
    accountType = account.type; 
    break; 
} 

ContentResolver cr = context.getContentResolver(); 
ContentValues values = new ContentValues(); 

values.put(CalendarContract.Calendars.ACCOUNT_NAME, accountName); 
//values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType); 
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); 
values.put(CalendarContract.Calendars.NAME, DaysSince.CAL_NAME); 
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, DaysSince.CAL_NAME); 
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 
values.put(CalendarContract.Calendars.VISIBLE, 1); 
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER); 
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, accountName); 
values.put(CalendarContract.Calendars.DIRTY, 1); 
values.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID()); 

Uri calUri = CalendarContract.Calendars.CONTENT_URI; 

calUri = calUri.buildUpon() 
     .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
     .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, accountName) 
     .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType) 
     .build(); 

Uri result = cr.insert(calUri, values); 
+0

問題が解決したら、あなた自身の質問に答えてください。あなたはバッジを手に入れ、多くの人が自由/簡単な助けを得るでしょう。 –

+0

あなたの質問にお答えしましたか?私は同じものを探しています。良い質問です。 –

答えて

2

はいできます。しかし、あなたのGoogleアカウントにリンクされたカレンダーを作成したいので、これのためにGoogleカレンダーAPIが必要です(Androidカレンダープロバイダでこれを行うための単一の解決策は見つかりませんでした)。リンクの下のチェック:

は彼らのAPIエクスプローラを確認してください。新しいカレンダーを作成するためのシンプルなHTTPリクエスト

POST https://www.googleapis.com/calendar/v3/calendars?key={YOUR_API_KEY}

{ 
"summary": "My new google calendar" 
} 

そして、それは、応答です:あなたとあなたのAndroidアプリからこのカレンダーを管理することができるはずその後

{ 
"kind": "calendar#calendar", 
"etag": "__________etag_val_________", 
"id": "[email protected]", 
"summary": "My new google calendar" 
} 

カレンダープロバイダ(同期後)。

+0

あなたは詳細を教えてもらえますか?あなたのコードで 'YOUR_API_KEY'とは何ですか? – yshahak

+0

Android API認証の場合、[OAuth 2.0](https://developers.google.com/google-apps/calendar/auth)でのみ認証が行われます。いずれにしても、最初の[リンク](https://developers.google.com/google-apps/calendar/quickstart/android)は有効で、AndroidとGoogleカレンダーAPIを使って簡単にスタートできます。 APIチェック([this](https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert))で新しいカレンダーを挿入すると、 – Luke

関連する問題