Webcal / .ics 从 Android 应用程序内订阅源

问题描述 投票:0回答:1

对于最近的应用程序,我希望提供在 Android 设备上订阅日历源的功能。无法访问 calendar.google.com 并手动添加 http 链接 (ics)。我真的找不到关于这个主题的很多信息。由于它是一个全新的应用程序,因此不必是 ics。只要能在 iOS Android 上正常工作即可。

在 iOS 上,这非常简单,因为您只需以编程方式使用 .ics 链接进行调用,用户就会收到一个要订阅的问题。 Android ICS 还引入了日历 API,但我还没有真正找到任何关于如何使用它订阅公共 ICS 的线索。我认为这是不可能的,因为这似乎是一种实际制作新日历或添加/更改事件但不订阅不断变化的 .ics 提要的方法。

无论如何,我只是想确定这是真的,而不是一个选择。 (我认为这是2014年Android的缺陷。)

还有一个关于 SO 的问题 相关,由 CommonsWare 提供答案。但是让用户与我的应用程序一起安装另一个应用程序并不是一种选择,而且太麻烦了。只有某种可以进行订阅的库才能真正使此过程可以在应用程序中使用。

android calendar feed icalendar subscribe
1个回答
0
投票
因此,Android 中可以订阅的所有内容都应该通过

BroadcastReceiver

s(侦听器)完成,而能够将数据公开给其他应用程序的所有内容都是 
ContentProvider
s(基本上是公共 SQL 数据库)。记住这一点,我们可以尝试这样的事情:
聆听日历变化:

// Adding permissions to the manifest <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> // registering the BroadcasrReceiver in manifest(you can do it also in java/kotlin code): <receiver android:name="path.to.some.Receiver"> <intent-filter> <action android:name="android.intent.action.PROVIDER_CHANGED" /> <data android:scheme="content" /> <data android:host="com.android.calendar" /> </intent-filter> </receiver> // Declaring receiver in the code class Receiver:BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Your Code that handles the Calendar ContentProvider query for example: // Run query val uri: Uri = CalendarContract.Calendars.CONTENT_URI val selection: String = "((${CalendarContract.Calendars.ACCOUNT_NAME} = ?) AND (" + "${CalendarContract.Calendars.ACCOUNT_TYPE} = ?) AND (" + "${CalendarContract.Calendars.OWNER_ACCOUNT} = ?))" val selectionArgs: Array<String> = arrayOf("[email protected]", "com.example", "[email protected]") val cur: Cursor = contentResolver.query(uri, EVENT_PROJECTION, selection, selectionArgs, null) } }
因此存在一些限制:

    在某些设备上(尤其是高度自定义的 ROM),此广播可能会被破坏 - 它会触发,但不是每次更改时都会触发 - 因此,如果您想要一致性,您可能必须对日历中的数据设置一些间隔轮询。
  1. BroadcastReceiver
    中的意图没有额外的内容,因此为了知道发生了什么变化,您必须每次都查询日历
    ContentProvider
    。至少我上次尝试时是这样的。
使用此 API,您还可以创建活动、邀请与会者以及使用日历进行基本的任何操作 - 有关更多信息,请参阅

官方文档

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.