2009年8月3日 星期一

Android 原始碼徹底研究系列 - 鬧鐘程式, App Widgets (2)

Android Source Code Internals - Alarm Clock, App Widgets (2)

從 Android v1.5 開始,終於開放 APIs,讓第三方開發者可以寫些 widgets,讓使用者可以放在手機的桌面上。一般手機就有內建幾個小 widgets,其中的 "Analog Clock" widget,就是由 Alarm Clock 這隻鬧鐘程式所提供的。

這次我們就來研究一下,這個 Analog Clock widget 是如何寫出來的。

不過,如果你對如何寫 App Widgets 一點概念都沒有的話,底下有幾個很好的參考資料,一定要先讀過:

要寫個 App Widget,首先你要先用 XML 寫個 AppWidgetProviderInfo,而且這個檔案建議放在 res/xml 中。在鬧鐘程式中,你可以找到 res/xml/analog_appwidget.xml 這個檔案。它的內容如下:

由 minWidth 及 minHeight 這兩個屬性來看,就可以了解,這個 App Widget 要佔桌面 2x2 cells 大小的空間。

updatePeriodMillis 的值為 0?那這個時鐘是如何自己動的呢?這我在 Android 原始碼徹底研究系列 - 鬧鐘程式, AnalogClock (1) 一文中,就已經解釋過 Analog Clock 是如何自我更新的。還不清楚的,先讀一下這篇。

initialLayout 這個屬性,從名字看起來,就知道它是用來描述這個 App Widget 的畫面設計。由其值我們可以知道,這個 App Widget 的畫面設計,是在 res/layout/analog_appwidget.xml 中。它的內容如下:

果然不出我們所料,這個 App Widget 的畫面設計,就只是一個簡單的 AnalogClock 。時鐘與時,分針圖檔就是分別透過 dial, hand_hour, hand_minute 這三個屬性來指定。

要注意的是,目前在 App Widget 的畫面設計檔中,你只能使用 FrameLayout, LinearLayout, RelativeLayout, AnalogClock, Button, Chronometer, ImageButton, ImageView, ProgressBar, TextView 等元件,其他元件都不能用。

寫好 AppWidgetProviderInfo XML 檔與 App Widget 畫面設計檔,別忘了,還要在 AndroidManifest.xml 中,宣告你的 App Widget Provider。

在這裡,他指明了這個 App Widget Provider 是要由 AnalogAppWidgetProvider 這個類別來處理。這個類別的原始碼就是 AnalogAppWidgetProvider.java

在這個類別中,主要的工作就是建立 App Widget,並透過 AppWidgetManager 發佈到桌面上。

鬧鐘程式所提供的 "Analog Clock" widget,其實功能很陽春,也沒有用到所有 App Widgets 提供的所有功能。不過,對於想要了解如何寫個 App Widget 的你,應該是有很大的幫助。如果你想要找個較為完整的 App Widget 範例,我建議你看一下 API Demos 這個範例程式。

4 則留言:

Ben Tseng 提到...

Dear samlu:
日前我在大陸相關網站,發現幾乎所有Market上的軟體,不論是付費或免費。都可以免費下載使用。
雖說這是習以為常的事,但深深重創手機軟體市場性。是否現在設計軟體的人,都只能在自家軟體上掛廣告來營利?

Regards,
Ben

samlu 提到...

iPhone 上的 AppStore 也有相同的問題,大陸版的 AppStore 也有所有的免費與付費軟體,台灣也是。你買台 iPhone,還附送大補帖一片,內有所有的軟體。

那你說,目前在 iPhone 上開發軟體還賺不賺錢? 答案應該還是賺的。

我給你的建議是,立足台灣,放眼世界。儘量做全世界可以用的軟體,那盜版對你所佔的比例,就會變小。

如果只做中文版的,我並不看好其零售商業模式。

匿名 提到...

老師你好 我現在要學做widget可是我英文程度不好 有沒有比較容易上手的中文書籍

匿名 提到...

我想請問一下app的程式安裝器要怎麼寫呢!
有哪位大大可以說一下嗎?或是友網站有程式
可供參考呢謝謝!!!

張貼留言