ICS의 새로운 캘린더 용 콘텐츠 공급자를 사용하여 캘린더를 만들려고합니다.Android 4.0 (ICS) 콘텐츠 공급자로 캘린더 만들기
public class CalendarSyncAdapter extends AbstractThreadedSyncAdapter
{
public CalendarSyncAdapter(Context context, boolean autoInitialize)
{
super(context, autoInitialize);
}
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)
{
Log.i(Debug.TAG, "onPerformSync()");
}
public void doCreateCalendar(Account account)
{
ContentResolver cr = getContext().getContentResolver();
ContentValues values = new ContentValues();
values.put(Calendars.ACCOUNT_NAME, account.name);
values.put(Calendars.ACCOUNT_TYPE, account.type);
values.put(Calendars.NAME, "newesttest");
values.put(Calendars.CALENDAR_DISPLAY_NAME, "newestTest");
values.put(Calendars.CALENDAR_COLOR, 0xFFFFFFFF);
values.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER);
values.put(Calendars.OWNER_ACCOUNT, account.name);
values.put(Calendars.SYNC_EVENTS, 1);
values.put(Calendars.VISIBLE, 1);
Uri creationUri = asSyncAdapter(Calendars.CONTENT_URI, account.name, account.type);
Uri created = cr.insert(creationUri, values);
long id = Long.parseLong(created.getLastPathSegment());
Log.i(Debug.TAG, "Calendar created: " + id + " - " + created);
}
private Uri asSyncAdapter(Uri uri, String account, String accountType)
{
return uri.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER,"true")
.appendQueryParameter(Calendars.ACCOUNT_NAME, account)
.appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
}
}
을하지만 어디에서나 볼처럼 내가 원하는 모든 새를 삽입하는 데 사용하는 것입니다 이후는 서비스 내에서 실행되지 않습니다 달력 생성이 만 SyncAdapter에서 수행 할 수 있기 때문에, 나는 하나를 만들었습니다 달력. 서비스 실행은 필수 항목이 아닙니까? 있을 것 같지 않습니다.
어쨌든, 나는 나의 활동에 인스턴스를 내 메서드를 호출 : 그것은 성공적으로 불만 실행
public void createCalendar(View v)
{
m_syncAdapter.doCreateCalendar(this, m_account);
}
을하지만 반환하는 URI는 항상 동일합니다. 행 ID에 대해 구문 분석 할 때 항상 12입니다. 그리고 내 일정을 확인할 때 새로운 것은 없습니다.
...
<application
...
<activity android:name="Setup" android:label="@string/activity_title_setup">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/calendar_sync_adapter" />
</activity>
그리고 calendar_sync_adapter.xml :
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="com.android.calendar"
android:accountType="com.google"
android:userVisible="true"
/>
내가 여기에 잘못하고 있어요 그래서하지 않도록 무엇을 내 매니페스트에서
나는 모든 설정을 가지고있다.
02-17 16:43:07.783: I/ActivityManager(184): Start proc com.android.providers.calendar for content provider com.android.providers.calendar/.CalendarProvider2: pid=20132 uid=10008 gids={3003, 1015}
02-17 16:43:07.806: I/ActivityThread(20132): Pub com.android.calendar: com.android.providers.calendar.CalendarProvider2
02-17 16:43:07.869: I/ActivityManager(184): Start proc com.google.android.calendar for service com.google.android.calendar/com.google.android.syncadapters.calendar.CalendarSyncAdapterService: pid=20145 uid=10007 gids={3003}
02-17 16:43:07.900: I/ActivityThread(20145): Pub com.google.android.calendar.CalendarRecentSuggestionsProvider: com.android.calendar.CalendarRecentSuggestionsProvider
// This is my print of the returned URI
02-17 16:43:08.009: I/C3(19995): Calendar created: 12 - content://com.android.calendar/calendars/12?caller_is_syncadapter=true&account_name=xxx%40gmail.com&account_type=com.google
02-17 16:43:08.876: I/CalendarProvider2(20132): Sending notification intent: Intent { act=android.intent.action.PROVIDER_CHANGED dat=content://com.android.calendar }
02-17 16:43:08.876: W/ContentResolver(20132): Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)
응답 해 주셔서 감사합니다. 예, 내가하려는 것은 Google 캘린더에 새 캘린더를 만드는 것입니다. 안타깝게도 Sync Adapters는 다음과 같은 점을 지적합니다. P 슬프게도이 작업은 새 Google 캘린더 제공 업체에서 지원하지 않습니다. 내가 말할 수있는 한 꽤 많이 웹 사이트의 데스크톱 버전을 통해해야합니다. – Adam
@ Adam, 2014 년 공식 Google 캘린더 앱에도이 기능이 없습니다. 달력을 만들려면 웹 응용 프로그램을 사용해야합니다. 이 상황은 Joe가 의미하는 바를 확인합니다. 동기화 어댑터는 동기화 작업을 수행하기위한 것이지 아무 것도 없습니다.이 경우 캘린더 생성은 API에서 더 나은 위치를 찾지 못한 기능인 것 같습니다. –