calendar 5 android版,calendars 5 安卓

Calendars 5介绍

Calendars 5 is complete re-imagining of what the best mobile calendar experience should be.

Calendars 5 is smart, excels in both tasks and events and runs on any iOS device you might have. Its the calendar app you have been looking for.

Three things youll love about Calendars 5

◆ Natural Language Input ◆

Just enter Meet John at Starbucks on Sunday and Calendars 5 will create the event for you.

◆ Task Manager ◆

Easy to use task manager that has everything you need to organize, track and complete your to-dos.

◆ First-class iPad calendar ◆

The first smart calendar for the iPad. Its large screen is great for managing your daily schedule and enables richer interaction with your calendar.

What makes Calendars 5 great in use

◆ Interface focused on events

Elegant and easy to use interface makes it super simple to get a quick overview of the upcoming events and tasks. You always keep your focus on whats important; there is nothing to distract you.

◆ Day, Week, Month and List views of your events.

Calendars 5 illustrates your Day, Week and Month on a small iPhone screen the best possible way. Depending on the situation, select the view that conveniently unveils your schedule.

◆ Works online and offline

Create, edit and delete events or tasks whenever you need it. All changes will be synced back to your account once you are online.

◆ All the features you love

Create custom recurring events (yoga every Tuesday, Friday and Sunday), get SMS reminders or set custom alerts, invite people to your events and more.

◆ Act as you feel it

Intuitively create events with just one tap in your calendar. Drag and Drop tasks and events, swipe to switch between days and weeks, return to your ‘Today’ schedule with one tap.

◆ Your tasks and events are always at hand

All your tasks and events are synced seamlessly in the background between iPhone and iPad. Whenever you need your schedule, its on tap.

Have any feedback, comments or issues? Please contact us directly at http//readdle.com/contact

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Android中提供的SyncAdapter框架来实现CalDAV同步,以下是一个简单的CalDAV Demo: 1. 创建SyncAdapter ```java public class CalDavSyncAdapter extends AbstractThreadedSyncAdapter { private final AccountManager mAccountManager; public CalDavSyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); mAccountManager = AccountManager.get(context); } @Override public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { //TODO: 实现CalDAV同步逻辑 } } ``` 2. 在AndroidManifest.xml中注册SyncAdapter ```xml <service android:name=".CalDavSyncAdapter" android:exported="true" android:process=":sync"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> </service> ``` 3. 在res/xml目录下创建syncadapter.xml文件,指定SyncAdapter的属性 ```xml <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="com.example.caldav" android:userVisible="true" android:supportsUploading="true" android:allowParallelSyncs="false" android:isAlwaysSyncable="true" /> ``` 4. 在MainActivity中创建账户并启动同步 ```java public class MainActivity extends AppCompatActivity { private Account mAccount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAccount = new Account("username", "com.example.caldav"); AccountManager accountManager = AccountManager.get(this); accountManager.addAccountExplicitly(mAccount, null, null); ContentResolver.setIsSyncable(mAccount, "com.android.calendar", 1); ContentResolver.setSyncAutomatically(mAccount, "com.android.calendar", true); ContentResolver.addPeriodicSync(mAccount, "com.android.calendar", new Bundle(), 60); } } ``` 5. 实现CalDAV同步逻辑 ```java private void syncCalendars(Account account) { CalDavAccount calDavAccount = getCalDavAccount(account); List<CalDavCalendar> remoteCalendars = getRemoteCalendars(calDavAccount); List<CalDavCalendar> localCalendars = getLocalCalendars(account); for (CalDavCalendar remoteCalendar : remoteCalendars) { if (!localCalendars.contains(remoteCalendar)) { createLocalCalendar(account, remoteCalendar); } else { updateLocalCalendar(account, remoteCalendar); } } for (CalDavCalendar localCalendar : localCalendars) { if (!remoteCalendars.contains(localCalendar)) { deleteLocalCalendar(account, localCalendar); } } } private CalDavAccount getCalDavAccount(Account account) { String username = account.name; String password = AccountManager.get(this).getPassword(account); //TODO: 创建CalDavAccount对象 } private List<CalDavCalendar> getRemoteCalendars(CalDavAccount calDavAccount) { //TODO: 获取远程CalDAV服务器上的日历列表 } private List<CalDavCalendar> getLocalCalendars(Account account) { List<CalDavCalendar> localCalendars = new ArrayList<>(); Cursor cursor = getContentResolver().query(Calendars.CONTENT_URI, null, Calendars.ACCOUNT_NAME + " = ? AND " + Calendars.ACCOUNT_TYPE + " = ?", new String[]{account.name, account.type}, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(Calendars.NAME)); String displayName = cursor.getString(cursor.getColumnIndex(Calendars.CALENDAR_DISPLAY_NAME)); String description = cursor.getString(cursor.getColumnIndex(Calendars.CALENDAR_DESCRIPTION)); String timeZone = cursor.getString(cursor.getColumnIndex(Calendars.CALENDAR_TIME_ZONE)); int color = cursor.getInt(cursor.getColumnIndex(Calendars.CALENDAR_COLOR)); int accessLevel = cursor.getInt(cursor.getColumnIndex(Calendars.CALENDAR_ACCESS_LEVEL)); boolean syncEvents = cursor.getInt(cursor.getColumnIndex(Calendars.SYNC_EVENTS)) == 1; //TODO: 创建CalDavCalendar对象并添加到localCalendars列表中 } cursor.close(); return localCalendars; } private void createLocalCalendar(Account account, CalDavCalendar remoteCalendar) { ContentValues values = new ContentValues(); values.put(Calendars.ACCOUNT_NAME, account.name); values.put(Calendars.ACCOUNT_TYPE, account.type); values.put(Calendars.NAME, remoteCalendar.getName()); values.put(Calendars.CALENDAR_DISPLAY_NAME, remoteCalendar.getDisplayName()); values.put(Calendars.CALENDAR_DESCRIPTION, remoteCalendar.getDescription()); values.put(Calendars.CALENDAR_TIME_ZONE, remoteCalendar.getTimeZone()); values.put(Calendars.CALENDAR_COLOR, remoteCalendar.getColor()); values.put(Calendars.CALENDAR_ACCESS_LEVEL, remoteCalendar.getAccessLevel()); values.put(Calendars.SYNC_EVENTS, 1); getContentResolver().insert(Calendars.CONTENT_URI, values); } private void updateLocalCalendar(Account account, CalDavCalendar remoteCalendar) { ContentValues values = new ContentValues(); values.put(Calendars.NAME, remoteCalendar.getName()); values.put(Calendars.CALENDAR_DISPLAY_NAME, remoteCalendar.getDisplayName()); values.put(Calendars.CALENDAR_DESCRIPTION, remoteCalendar.getDescription()); values.put(Calendars.CALENDAR_TIME_ZONE, remoteCalendar.getTimeZone()); values.put(Calendars.CALENDAR_COLOR, remoteCalendar.getColor()); values.put(Calendars.CALENDAR_ACCESS_LEVEL, remoteCalendar.getAccessLevel()); getContentResolver().update(Calendars.CONTENT_URI, values, Calendars.ACCOUNT_NAME + " = ? AND " + Calendars.ACCOUNT_TYPE + " = ?" + " AND " + Calendars.NAME + " = ?", new String[]{account.name, account.type, remoteCalendar.getName()}); } private void deleteLocalCalendar(Account account, CalDavCalendar localCalendar) { getContentResolver().delete(Calendars.CONTENT_URI, Calendars.ACCOUNT_NAME + " = ? AND " + Calendars.ACCOUNT_TYPE + " = ?" + " AND " + Calendars.NAME + " = ?", new String[]{account.name, account.type, localCalendar.getName()}); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值