Jollen 的 Android 教學,#28: HelloIntentSelect - 內容選擇器(Content Chooser)

jollen 發表於 August 7, 2009 11:13 PM

上一篇教學提到如何利用Intent實作「自動撥放」程式。而另外一個較具代表性的Intent應用就是「內容選擇器」。例如,要怎麼實作一個音樂撥放機呢?先說明音樂撥放器HelloIntentSelect範例的使用情境如下:

1. 執行HelloIntentSelect後,出現一個「撥放音樂」的按鈕
2. 按下按鈕後,選擇一個音樂檔撥放

實作「選擇音樂檔」的做法是使用Intent的「chooser」觀念。程式做法如下:

1. 建立action為ACTION_GET_CONTENT的Intent:

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

2.設定Intent的mime type,例如:設定Intent的mime type為聲音檔案:

 intent.setType("audio/*");

3.建立內容選擇器並送出Intent:

 startActivity(Intent.createChooser(intent, "Select music"));

以上的程式是根據Android的Reference Guide寫出來的。當Intent action為ACTION_GET_CONTENT時,表示要根據mime type來「取得內容」(get content),因此呼叫setType()方法,來定義內容的mime type。

定義好mime type後,再呼叫createChooser()方法來產生能取得此mime type內容的「選擇器」,簡單說,就是一個「檔案選取程式」。

利用Android的Intent觀念,我們以不到十行的程式碼實作了一個音樂撥放器。

Action的屬性寫法與常數寫法

Intent的action寫法有二種。第一種寫法是屬性(attribute)寫法,例如第一個HelloIntentDialer範例:

 dial.setAction("android.intent.action.CALL");

在「android.intent.action」套件(package)裡,定義了action的屬性。第二種寫法是常數寫法,例如第二個HelloIntentSelect範例:

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

在「Intent」類別(class)裡,定義了action的常數。在記憶的技巧上,可以用「xxx對於到ACTION_xxx」的方式記。例如:

CALL(android.intent.action.CALL)就是ACTION_CALL(Intent.ACTION_CALL)。

又如,所以當我們講「GET_CONTENT」時,指的就是android.intent.action.GET_CONTENT;同理,講ACTON_GET_CONTENT時,就是代表Intent.ACTION_GET_CONTNET。所以「GET_CONTENT」與「ACTION_GET_CONTNET」代表相同的Intent。

hellointentselect-1.png
圖1: HelloIntentSelect主程式

hellointentselect-2.png
圖2: 出現一個Content Chooser:「音樂選擇器」

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw