通过聊天 (XMPP) Android 发送日历事件

Posted

技术标签:

【中文标题】通过聊天 (XMPP) Android 发送日历事件【英文标题】:Send Calendar Event via Chat (XMPP) Android 【发布时间】:2014-04-26 06:46:15 【问题描述】:

我刚刚开始熟悉 android,我想通过移动设备向其他人发送日历活动。与whatsapp 发送联系人相同。对于在聊天中发送联系人 (XMPP),我使用了 vCard。那么在聊天中发送日历事件我应该使用什么?

我搜索了很多。但找不到有成果的东西。

请在XMPP 中推荐用于发送日历事件的库或代码 sn-p。

提前致谢。

【问题讨论】:

【参考方案1】:

您可以参考iCal Import Export 允许您在不使用谷歌同步服务的情况下将iCalender 文件导入您的日历。

使用它,您可以将所有日历事件导入iCalendar 文件,并将这些事件导出回日历。使用Calendar Provider 可以获取所有日历数据,但需要android API 级别14 或更高,而使用iCal Import Export 您也可以获取较低API 级别 的所有日历数据。

【讨论】:

【参考方案2】:

清单

<uses-permission android:name="android.permission.READ_CALENDAR" />

代码:

Cursor cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[] "_id",  "displayname" , null, null, null);
cursor.moveToFirst();
String[] CalNames = new String[cursor.getCount()];
int[] CalIds = new int[cursor.getCount()];
for (int i = 0; i < CalNames.length; i++) 
    CalIds[i] = cursor.getInt(0);
    CalNames[i] = cursor.getString(1);
    cursor.moveToNext();

cursor.close();

获取所有事件,特定事件通过指定范围来完成

ContentResolver contentResolver = getContentResolver();

Uri.Builder builder = Uri.parse(getCalendarUriBase() + "/instances/when").buildUpon();
        long now = new Date().getTime();
        ContentUris.appendId(builder, now - DateUtils.MILLIS_PER_DAY*10000);
        ContentUris.appendId(builder, now + DateUtils.MILLIS_PER_DAY * 10000);

然后假设您希望记录 ID = 1 的日历中的事件 ID

Cursor eventCursor = contentResolver.query(builder.build(),
                new String[]  "event_id", "Calendars._id=" + 1,
                null, "startDay ASC, startMinute ASC"); 
        // For a full list of available columns see http://tinyurl.com/yfbg76w
        while (eventCursor.moveToNext()) 
            String uid2 = eventCursor.getString(0);
            Log.v("eventID : ", uid2);

        

现在在 Listview 中显示此事件,选择其中一个作为文本消息发送并在接收方:

Calendar cal = Calendar.getInstance();              
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY");
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", HERE MSG WHICH YOU RECEIVE);
startActivity(intent);

【讨论】:

getCalendarUriBase() 定义在哪里? "content://calendar/calendars" MILLIS_PER_DAY 不适用于 ANDROID。 长天 = TimeUnit.MILLISECONDS.toDays(毫秒);【参考方案3】:

没有库 AFAIK,它实际上只是检索日历事件并将其数据转换为 XML 的问题。不幸的是,也没有关于如何在 XMPP/XML 中表示日历事件的 XEP,因此您必须提出自己的表示。

【讨论】:

【参考方案4】:

iCalendar/vCalendar是类似于vCard的日历文件格式

【讨论】:

从哪里下载? 你在***文章的右上方看到 RFC 链接了吗? 是的,标准中的 RFC 5545。【参考方案5】:

您可以在 vcard 中添加保存日历信息示例的新字段

VCard vCard = new VCard();
vCard.setField("calender","calender info");

日历信息应该是一个字符串,它可以是一个json格式的字符串。

收到的用户可以加载你的vcard并使用方法

vCard.load(connection, Jid);
String string=vCard.getField("calender");

【讨论】:

【参考方案6】:

你真的不需要任何特定的库来达到这个目的。 您可以查看Calendar Provider 他们也有一个很棒的例子!

请务必在您的 manifest.xml 中使用这些权限

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

如果您想发送联系人,请查看Android: How to import contact from phone?

如果对您有帮助,请投票!我真的需要它。 :)

【讨论】:

我不想只导入日历事件。我想导入日历事件并通过短信发送。因为 vCard 用于发送联系人。 :) 您可以做的是获取 vCard 并解析其详细信息。之后使用短信提供商发送短信。 我想发送日历事件而不是联系人。对于发送联系人,我使用了 vCard。对于日历事件发送我应该使用哪个库? 使用这个。 developer.android.com/guide/topics/providers/…

以上是关于通过聊天 (XMPP) Android 发送日历事件的主要内容,如果未能解决你的问题,请参考以下文章

如何为XMPP android的聊天节实现OMEMO加密

xmpp facebook不发送消息

如何使用 Openfire 和 XMPP 在 Android 中制作聊天机器人应用程序

Android XMPP 聊天单刻度线以及如何从日志中读取 h 值

使用 Android 应用程序在 XMPP Openfire 服务器中的聊天过程

如何创建与 android 聊天应用程序通信的节点 xmpp 服务器