上一篇教學提到如何利用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。
圖1: HelloIntentSelect主程式
圖2: 出現一個Content Chooser:「音樂選擇器」
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw