从网站下载 .ics 到 Android 日历
Download .ics from website to Android calendar
我的智能手机上的 .ics 文件和日历有问题。首先,要创建一个 ICS 文件并下载它,我使用这个函数:
function createEventCalendar($start, $end, $description, $location) {
$event = array();
$rand = rand(5, 1000000000);
$event['name'] = "event";
$event['data'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//blabla//blabla//FR\nBEGIN:VEVENT\nDTSTAMP:".date('Ymd\THis')."\nSTATUS:CONFIRMED\nUID:".$rand."\nDTSTART:".date('Ymd\THis', strtotime($start))."\nDTEND:".date('Ymd\THis', strtotime($end))."\nSUMMARY:Rendez-vous assurance\nDESCRIPTION:".$description."\nLOCATION:".$location."\nEND:VEVENT\nEND:VCALENDAR\r\n";
return $event;
}
public function downloadEventCalendar($event) {
$eventname = $event['name'].'.ics';
header("Content-Type: text/x-vCalendar");
header("Content-Disposition: attachment; filename=\"".$eventname."\"");
echo $event['data'];
exit();
}
以我为例,DTEND
在 DTSTART
后 1 小时完成。我的问题是当我从我的 XPERIA 下载此文件并单击事件 event.ics
时,我选择 Default account : Calendar of the device
并且该事件从未导入并且屏幕被阻止,如您所见:
我是否忘记为 android 添加参数?因为它适用于 IOS.
UPDATE:这里是 ICS 生成的代码
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//blaBla//blaBla//FR
BEGIN:VEVENT
DTSTAMP:20150804T095037
STATUS:CONFIRMED
UID:495370174
DTSTART:20150901T120000
DTEND:20150901T130000
SUMMARY:My summary
DESCRIPTION:Description of the event
LOCATION:My calendar
END:VEVENT
END:VCALENDAR
谢谢
您生成的 iCalendar 文件存在几个问题。我建议您尝试使用在线验证器。如果在那之后你仍然有问题,你应该分享实际生成的 iCalendar,而不是生成它的代码(特别是如果它都在一行上:/)
最后,我找到了解决办法!
当我创建文件内容时,我使用了 \n
,我们需要在每一行的末尾使用 \r\n
,如下所示:
$event['data'] = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//blabla//blabla//EN\r\nBEGIN:VEVENT\r\nDTSTAMP:".date('Ymd\THis')."\r\nSTATUS:CONFIRMED\r\nUID:".$rand."\r\nDTSTART:".date('Ymd\THis', strtotime($start))."\r\nDTEND:".date('Ymd\THis', strtotime($end))."\r\nSUMMARY:my summary\r\nDESCRIPTION:".$description."\r\nLOCATION:".$location."\r\nEND:VEVENT\r\nEND:VCALENDAR";
下载文件我使用了header,正确的是:
header("Content-Type: text/Calendar");
header("Content-Disposition: attachment; filename=\"".$eventname."\"");
谢谢
我的智能手机上的 .ics 文件和日历有问题。首先,要创建一个 ICS 文件并下载它,我使用这个函数:
function createEventCalendar($start, $end, $description, $location) {
$event = array();
$rand = rand(5, 1000000000);
$event['name'] = "event";
$event['data'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//blabla//blabla//FR\nBEGIN:VEVENT\nDTSTAMP:".date('Ymd\THis')."\nSTATUS:CONFIRMED\nUID:".$rand."\nDTSTART:".date('Ymd\THis', strtotime($start))."\nDTEND:".date('Ymd\THis', strtotime($end))."\nSUMMARY:Rendez-vous assurance\nDESCRIPTION:".$description."\nLOCATION:".$location."\nEND:VEVENT\nEND:VCALENDAR\r\n";
return $event;
}
public function downloadEventCalendar($event) {
$eventname = $event['name'].'.ics';
header("Content-Type: text/x-vCalendar");
header("Content-Disposition: attachment; filename=\"".$eventname."\"");
echo $event['data'];
exit();
}
以我为例,DTEND
在 DTSTART
后 1 小时完成。我的问题是当我从我的 XPERIA 下载此文件并单击事件 event.ics
时,我选择 Default account : Calendar of the device
并且该事件从未导入并且屏幕被阻止,如您所见:
我是否忘记为 android 添加参数?因为它适用于 IOS.
UPDATE:这里是 ICS 生成的代码
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//blaBla//blaBla//FR
BEGIN:VEVENT
DTSTAMP:20150804T095037
STATUS:CONFIRMED
UID:495370174
DTSTART:20150901T120000
DTEND:20150901T130000
SUMMARY:My summary
DESCRIPTION:Description of the event
LOCATION:My calendar
END:VEVENT
END:VCALENDAR
谢谢
您生成的 iCalendar 文件存在几个问题。我建议您尝试使用在线验证器。如果在那之后你仍然有问题,你应该分享实际生成的 iCalendar,而不是生成它的代码(特别是如果它都在一行上:/)
最后,我找到了解决办法!
当我创建文件内容时,我使用了 \n
,我们需要在每一行的末尾使用 \r\n
,如下所示:
$event['data'] = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//blabla//blabla//EN\r\nBEGIN:VEVENT\r\nDTSTAMP:".date('Ymd\THis')."\r\nSTATUS:CONFIRMED\r\nUID:".$rand."\r\nDTSTART:".date('Ymd\THis', strtotime($start))."\r\nDTEND:".date('Ymd\THis', strtotime($end))."\r\nSUMMARY:my summary\r\nDESCRIPTION:".$description."\r\nLOCATION:".$location."\r\nEND:VEVENT\r\nEND:VCALENDAR";
下载文件我使用了header,正确的是:
header("Content-Type: text/Calendar");
header("Content-Disposition: attachment; filename=\"".$eventname."\"");
谢谢