有時候你需要某個簡單的功能,但自己打造需要花費一些時間,如果能夠借用他人已經建立的功能,就能事半功倍。例如一個簡單的事件通知功能,只要借用 Android 內建的行事曆 App 就能夠達成。
但有一點要注意,因為是借力使力,所以如果沒力可借(沒有該 App),那當然就什麼事都做不成啦~~
但有一點要注意,因為是借力使力,所以如果沒力可借(沒有該 App),那當然就什麼事都做不成啦~~
發出對的意圖
要使用內建的 Calendar App 來建立事件通知,可以使用 Intent 來送出我們的意圖,而這個意圖要設定 Action 來告知我們想要做什麼,並且設定 Type 告知我們的 MIME 資料類型,接著 putExtra 包含想要送出的資料,程式碼大概如下:Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("title", "This is a Title.");
Calendar Intent Helper
因為寫法還滿簡單的,而且可能很常用,所以我建立了一個 CalendarIntentHelper 類別來產生可以送出 Calendar Event 的 Intent,程式碼如下:package com.demo.calendardemo;
import android.content.Intent;
/**
* Calendar Intent Helper
* @author Tony
*
*/
public class CalendarIntentHelper {
public static final String EVENT_BEGIN_TIME = "beginTime";
public static final String EVENT_END_TIME = "endTime";
public static final String EVENT_ALL_DAY = "allDay";
public static final String EVENT_TITLE = "title";
public static final String EVENT_DESCRIPTION = "description";
public static final String EVENT_LOCATION = "eventLocation";
private String title = "";
private String description = "";
private String location = "";
private boolean allDay = false;
private long beginTimeInMillis = 0;
private long endTimeInMillis = 0;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public boolean isAllDay() {
return allDay;
}
public void setAllDay(boolean isAllDay) {
this.allDay = isAllDay;
}
public long getBeginTimeInMillis() {
if (beginTimeInMillis == 0) {
return System.currentTimeMillis();
}
return beginTimeInMillis;
}
public void setBeginTimeInMillis(long beginTimeInMillis) {
this.beginTimeInMillis = beginTimeInMillis;
}
public long getEndTimeInMillis() {
if (endTimeInMillis == 0) {
return getBeginTimeInMillis() + (60 * 60 * 1000);//1 hour later
}
return endTimeInMillis;
}
public void setEndTimeInMillis(long endTimeInMillis) {
this.endTimeInMillis = endTimeInMillis;
}
public Intent getIntentAfterSetting(){
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(CalendarIntentHelper .EVENT_TITLE, getTitle());
intent.putExtra(CalendarIntentHelper .EVENT_DESCRIPTION, getDescription());
intent.putExtra(CalendarIntentHelper .EVENT_BEGIN_TIME, getBeginTimeInMillis());
intent.putExtra(CalendarIntentHelper .EVENT_END_TIME, getEndTimeInMillis());
intent.putExtra(CalendarIntentHelper .EVENT_ALL_DAY, isAllDay());
intent.putExtra(CalendarIntentHelper .EVENT_LOCATION, getLocation());
return intent;
}
}
使用方式如下:
//建立事件開始時間
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 9, 19, 17, 50);
//建立事件結束時間
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 9, 19, 19, 30);
//建立 CalendarIntentHelper 實體
CalendarIntentHelper calIntent = new CalendarIntentHelper();
//設定值
calIntent.setTitle("事件標題");
calIntent.setDescription("事件內容描述");
calIntent.setBeginTimeInMillis(beginTime.getTimeInMillis());
calIntent.setEndTimeInMillis(endTime.getTimeInMillis());
calIntent.setLocation("事件地點");
//全部設定好後就能夠取得 Intent
Intent intent = calIntent.getIntentAfterSetting();
//送出意圖
startActivity(intent);
如果你的裝置(手機)中只有內建的 Calendar App 就會立即開啟,如果同時有兩個可接收此 Action 的 App 則會出現清單讓你選擇,若無任何可以開啟的 App 則什麼事也不會發生。
本文網址:https://blog.tonycube.com/2012/10/androidcalendar-event.html
由 Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀
由 Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀
請問前輩,
回覆刪除如果要建立兩個不同日期時間的行事曆, 要怎麼做呢? 或者說要如何判斷第一個行事曆建立完成後, 再建立第二個行曆呢??
謝謝!!
第一個改為使用 startActivityForResult,
刪除它會在執行完後回傳資料,
然後覆寫 onActivityResult() 方法,
它會在 startActivityForResult 被呼叫並回傳資料時執行,
你可以把第二個行事曆設定寫在這裡。
我沒試過,你要自己試試看~~
感謝指導,謝謝!!
回覆刪除