Jor*_*rdy 14 icalendar android calendar feed subscribe
对于最近的应用程序,我希望能够在停留在Android设备上时订阅日历源.转到calendar.google.com并手动添加http链接(ics)不是一个选项.我真的找不到关于这个主题的很多信息.由于它是一个全新的应用程序,它不一定是ics.任何在iOS 和 Android 上运行正常的东西.
在iOS上,这很容易,因为您可以通过编程方式使用.ics链接进行调用,用户将获得一个要订阅的问题.Android ICS还引入了Calendar API,但我还没有找到任何关于如何使用它来订阅公共媒体的线索.我不认为这是可能的,因为它似乎只是一种实际制作新日历或添加/更改事件但不订阅更改.ics提要的方式.
无论如何,我只是想确定这是真的,而不是一个选择.(在我看来,这是2014年Android的一个缺陷.)
有对SO另一个问题是相关的,通过CommonsWare答案.但是让用户与我的应用程序一起安装另一个应用程序不是一个选项,而且太麻烦了.只有可以进行订阅的某种库才能真正使这个过程在应用程序中使用.
因此,Android 中所有可以订阅的内容都应该通过BroadcastReceivers(监听器)来完成,而所有能够将数据暴露给其他应用程序的内容都是ContentProviders(基本上是公共 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("hera@example.com", "com.example", "hera@example.com")
val cur: Cursor = contentResolver.query(uri, EVENT_PROJECTION, selection, selectionArgs, null)
}
}
Run Code Online (Sandbox Code Playgroud)
但也有一些限制:
BroadcastReceiver没有额外的内容,因此为了了解发生了什么变化,您必须ContentProvider每次都查询日历。至少我上次尝试时是这样的。使用此 API,您还可以创建活动、邀请与会者以及使用日历执行任何基本操作 - 有关详细信息,请参阅官方文档。
关于 Webcal,Google 日历应用程序对 Webcal 协议的支持有限。更改最多可能需要 24 小时才能生效,并且不保证一定会发生。另外,关于Android——我认为应用程序内部根本不支持它——至少谷歌本身不支持。我听说过 Android 的日历应用程序确实支持它 - 从未使用过这些应用程序,所以我不知道实现的细节 - 我假设它们通过自己的后端工作并使用 Webcal 协议进行中间获取和缓存数据的变化 - 为了仓促 - 所以绝对没有使用 Android 原生方法。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |