今天是第三天,我來學習一下官方提供的最複雜應用性最強的一個例子,示範了郵件功能的實作。全部例子來源于官方的sample檔案。
一、整體結構
通過觀察工程的整體結構我們可以看到它具有三個java檔案,由于該程式除了主程式之外,還具有另外一個配置帳号資訊的界面,是以使用ConfigAccountLayout.java檔案來描述。
二、主界面介紹
public class MailAPIDemoActivity extends Activity implements POP3ProcessListener
該程式應用了POP3ProcessListener的接口,具有java基礎的朋友們對此應該不會陌生。該接口要求實作void receivedMailMessage(BaseAccountInfo accountInfo, CMMail m)函數,作為收到郵件消息的響應。
該函數内容為: if (mail != null) printLog("Received new mail: /n" + mail.toString());
還有若幹變量常量的定義:
// 這裡定義了帳号的基本資訊,是OPhone自帶的郵件功能類
public BaseAccountInfo accountInfo;
// 該Listener可以關注郵件任務狀态
public MailEventListenerClass mailEventListener;
public View mainView;
public static final String TAG = "MailExample";
public static final String TAG_CMMail = "CMMail";
public static final String TAG_POP3ProcessListener = "POP3ProcessListener: ";
接下來是onCreate代碼:
在主界面首先定義了mainView和textView,此外,還有郵件消息的Listener和帳号資訊。
接下來,定義了三個按鈕,一個是配置郵件,一個是接收郵件,一個是發送郵件。
1.配置郵件
Button configButton = (Button) findViewById(R.id.button_config_account);
configButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
ConfigAccountLayout view = (ConfigAccountLayout) ConfigAccountLayout.inflate(
MailAPIDemoActivity.this, R.layout.config_account, null);
view.setAccountInfo(accountInfo);
setContentView(view);
}
});
從上面代碼我們可以看到,按鈕代碼主要流程是:按鈕定義、建立Listener、配置單擊事件、設定事件響應内容(如切換到ConfigAccountLayout)。在建立ConfigAccountLayout時,我們用到了inflate函數,它可以從一個已有的資源擴充生成一個新的view該函數定義如下:
View android.view.View.inflate(Context context, int resource, ViewGroup root)
setAccountInfo函數是在ConfigAccountLayout.java中定義的,用于設定賬戶資訊,在我們會在後面進行分析。最後将目前的視圖切換至配置郵件視圖。
2.接收郵件
Button popbutton = (Button) findViewById(R.id.button_pop);
popbutton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (accountInfo == null) {
printLog("Please config account first!");
return;
}
printLog("Start fetch new mail...");
// 擷取伺服器郵件消息
CMMailTaskController.getInstance().startFetchNewMessages(MailAPIDemoActivity.this,accountInfo,null, mailEventListener,MailAPIDemoActivity.this);
}
});
接收郵件的功能實作較容易了解,首先檢查賬戶配置,然後通過收郵件函數執行功能。
3.發送郵件
Button smtpbutton = (Button) findViewById(R.id.button_smtp);
smtpbutton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (accountInfo == null) {
printLog("Please config account first!");
return;
}
try {
// 建立郵件執行個體
CMMail mail = new CMMail();
//添加發送位址
EditText inputTo = (EditText)MailAPIDemoActivity.this.findViewById(R.id.input_to);
String toAddress = inputTo.getText().toString();
if (toAddress == null || toAddress.length() == 0) {
printLog("Please input address first");
return;
}
CMMailAddress toadd = new CMMailAddress(null, toAddress);
mail.addToAddress(toadd);
// 設定郵件主題
mail.setSubject("OMS API Test Mail");
//設定郵件内容
mail.setBodyTxt("Hello!/nThis is a mail from OMS API Tester!");
// 建立發送清單
CMMail[] sendmails = new CMMail[] { mail };
// 開始發送消息
CMMailTaskController.getInstance().startSendMessages(MailAPIDemoActivity.this,accountInfo, sendmails,mailEventListener);
printLog("Posted mail to: " + toadd.getAddress()+ "; Subject: " + mail.getSubject());
} catch (Exception e) {
printLog(TAG_POP3ProcessListener + e.toString());
Log.d(TAG, TAG_POP3ProcessListener + e.toString());
}
}
});
}
該主界面還包含了一個class,我們來分析郵件狀态響應:
public class MailEventListenerClass implements MailEventListener
它需要實作 MailEventListener接口,該接口函數内容如下:
事件分為三類:登入、收取郵件、收取帶附件郵件,具體事件的清單描述可以檢視:http://www.ophonesdn.com/documentation/ophone/reference/ophoneapi/mail/oms/mail/MailBaseEvent.html
在主程式的最後,還有兩個函數,實作了列印日志的功能。
putstring功能是将文本"text"插入到字元串text中。作為在消息隊列中Handler提取的關鍵字。
Handler可以處理和發送與消息隊列相關的消息或者運作對象。handleMessage是必須實作的接口,用于接收處理消息。在該handlerlog裡面,将msg顯示到view中。在printlog中,sendMessage函數功能是添加消息至消息隊列尾部。
三、郵件帳号配置
郵件帳号配置功能在另外一個ConfigAccountLayout.java檔案中實作,它extends于RelativeLayout, 即它上面的元件的位置可以用和其他元件或者父親的相對位置來描述。context作為應用程式的全局環境,即ConfigAccountLayout.java使用MailAPIDemoActivity的context。
當View附加到一個窗體上時,調用onAttachedToWindow方法,該方法完成:1.定義控件,2.初始化帳号資訊,3.定義OK Cancel按鈕。這些代碼都很容易看懂,可以觀察到,ok按鈕中有函數getAccount。
該函數為OPhone自帶函數,功能是将擷取的郵件配置參數進行寫入。每個函數的具體功能和參數可以參考:http://www.ophonesdn.com/documentation/ophone/reference/ophoneapi/mail/oms/mail/BaseAccountInfo.html
以下是配置界面運作結果:
四、補充資料
最後,貼一些郵件工具包的介紹,來自superzhang的翻譯,http://www.superzhang.com.cn/viewthread.php?tid=67&extra=page%3D1 , API原始位址 http://www.ophonesdn.com/documentation/ophone/reference/ophoneapi/mail/oms/mail/package-summary.html
Package oms.mail
這個包提供了接收和發送郵件的所有API.
接口
MailEventListener
郵件事件監聽接口.
POP3ProcessListener
郵件接收接口.
類
BaseAccountInfo
賬戶資訊的基類,包含了所有參數的設定。
CMMail
包含了設定和擷取郵件各部分内容的一些方法。
CMMailAddress
郵件位址類,可以設定和擷取郵件位址。
CMMailBodyPart
郵件内容類
CMMailTaskController
提供了一個執行個體來管理和運作郵件任務,例如接收和删除郵件。
MailBaseEvent
郵件事件類。
MailBaseEvent.TaskStatus
發送和接收郵件任務的狀态資訊。
異常
MailException
郵件正常異常
最後,就介紹到這裡,通過本例的學習,使我對OPhone 手機開發有了更加深入的了解。