gpt4 book ai didi

android - 如何在android的设置屏幕中显示已安装的日历列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:31 25 4
gpt4 key购买 nike

我想在设置屏幕中显示 android 中已安装日历的列表,然后从中选择一个。我在 android 应用程序中看到了这个功能 Cal .可以找到 Cal 应用程序中已安装日历列表的屏幕截图 here .

我想知道的是“是否可以使用 res/XML 下的 显示日历列表”?

我是否必须使用 PackageManager 选择日历列表才能找到所有已安装应用程序的列表并仅显示日历应用程序?

我尝试通过以下方法使用

<Preference android:title="@string/pref_select_calendar" >
<intent
android:action="android.intent.action.PICK"
android:data="content://calendar/calendars" />
</Preference>

但我有 android.content.ActivityNotFoundException: 没有找到处理 Intent 的 Activity

{ act=android.intent.action.PICK dat=content://calendar/calenders }

我错过了什么?或者我尝试的方法不正确?任何指针都会非常有帮助。谢谢。

最佳答案

您必须查询 CalendarProvider (自 API 级别 14 起可用)的可用日历的日历表。以下代码段将向您展示如何操作:

final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Calendars._ID,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.CALENDAR_COLOR
};

final ContentResolver cr = getContentResolver();
final Uri uri = CalendarContract.Calendars.CONTENT_URI;
Cursor cur = cr.query(uri, EVENT_PROJECTION, null, null, null);
final List<CalendarInfo> result = Lists.newArrayList();

while (cur.moveToNext()) {
/* do something with the cursor:
Long id = cur.getLong(0);
String name = cur.getString(1);
int color = cur.getInt(2);
*/
}

由于您正在进行 IO 工作(提供程序基本上是 SQLite 数据库),因此将所有内容包装到一个单独的(非 UI)线程中是一个不错的主意;我会选择 RxJava .

如果您不喜欢玩游标、查询和样板代码,请使用 CalendarWrapper图书馆。它负责对象和数据库行之间的映射,可以使用对象方法执行 CRUD 操作。例如,在您的情况下,单行就可以发挥作用:

final List<Calendar> calendars = Calendar.getCalendarsForQuery(null, null, null, getContentResolver());

掌握可用日历后,只需将它们放入列表中并在对话框中显示,这是最简单的方法。

关于android - 如何在android的设置屏幕中显示已安装的日历列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21087731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com