如果您的應用程序獨立於用戶的日曆活動,您可以創建一個SyncAdapter
(也需要一個AccountAuthenticator
),並註冊它以與android日曆事物同步。然後,作爲同步適配器,使用所需顏色創建新日曆並將其標記爲只讀;把你的事件放在那裏,他們會出現在用戶可能使用的任何日曆應用上。從您的應用程序中,只需查詢日曆中的事件,即可獲取您的活動,而無需額外的過濾。
例子和文章:還有的android doc about the calendar provider,其中介紹瞭如何訪問和修改日曆和事件。你需要這個來創建和填充你的日曆。如果您不需要認證您的應用程序,看到"Creating a Stub Authenticator",並通過編程方式創建帳戶
Account account = new Account("static username, displayed to user", "your.type");
AccountManager.get(context).addAccountExplicitly(account, "", null);
ContentResolver.setSyncAutomatically(account, "com.android.calendar", true);
記住一個單獨的XML文件(RES/XML/yourname.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="your.type"
android:userVisible="true"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
android:supportsUploading="false"
/>
請注意,我添加了isAlwaysSyncable
;當不設置該屬性時,必須調用ContentResolver.setIsSyncable
以允許任何同步。
您還需要註冊一個服務產生的SyncAdapter(就像用AccountAuthenticator
),在AndroidManifest.xml中:
<service android:name=".package.classname" android:exported="true">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/yourname" />
</service>
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<!-- when distributing an AccountAuthenticator this is also required: -->
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
對於一般的同步適配器的東西,如何把它放在一起,有一個偉大的博客文章"write your own Android Sync Adapter"。
來源
2013-08-05 21:25:07
dst
謝謝dst!通過將它們轉爲只讀,我能夠在應用程序內部更改它們嗎?我不想讓它們在我的應用程序之外進行更改,因爲它可能包含無法在外部更改的重要信息。 – filipehd
您可以同步只讀日曆。我不完全確定您是否可以從應用程序中的任何位置進行更改,但是可以從同步適配器進行更改。 – dst
我與CalendarProvider有點菜鳥,但這似乎是一個好主意。其實我打算這樣做,但由於缺乏經驗,我一直在使用現有的日曆之一來存儲我的活動。你知道任何網站或文章更詳細地說明你已發佈的這個解決方案嗎?非常感謝 – filipehd