2011年12月21日 星期三 | By: 雞米

[Android] 開機後(Boot up)自動啟動Service


(How to start a service on boot)

某些情況我們需要在系統開機完成後啟動程式(通常是Service)執行特定任務,例如:下載/更新檔案、向後端查詢資訊…等。
2011年12月14日 星期三 | By: 雞米

[Android] 取得Device目前電池電量

(How to get current battery level)


Android系統會在電池狀態發生變化時,發出System broadcast intent,會附帶電池狀態、電量、溫度等內容,APP要取得電池電量就必須註冊BroadcastReceiver來接收此intent。
2011年12月12日 星期一 | By: 雞米

[Android] Android APP下載次數爆炸成長背後的祕密


對於Android而言,2011絕對是爆發性成長的一年,前陣子官方公佈Android Market下載次數突破100億,一整年從原本只有20幾億足足成長了近80億,相當嚇人。

[PHP] 使用POST Request上傳File至Server side

要透過POST Request將表單attached的檔案上傳至Server端,必須將form的enctype宣告為multipart/form-data,它意味著提交的內容包含file input type,再透過後端PHP將上傳的檔案儲存至設定的位置,就達成簡單的上傳功能。
2011年12月11日 星期日 | By: 雞米

[Android] 偵測目前網路連線狀態

(Get the state of network connectivity)



某些情況下APP必須取得目前網路連線狀態,例如:執行需要從遠端進行下載的更新動作,上傳檔案…等等,只要取得目前連線狀態,就可以避免使用者在無網路狀態下去執行必然會產生例外的功能,系統也會讓人感覺比較友善。
2011年12月9日 星期五 | By: 雞米

[Android] Activity之間如何透過Intent傳遞複雜結構的data

(How to add complex data to the intent object)


Application是由許多Activities所組成,不同Activity之間是藉由Intent物件來進行啟動/關閉,Intent物件可以帶入data傳遞給它所喚起的Activity,它可能是上個Activity執行後的結果。
2011年11月24日 星期四 | By: 雞米

[Android] 如何呼叫Android Browser Activity開啟URL


Activity之間是透過Intent物件進行activate與傳遞訊息,包括相同App內的Explicit Intent以及不同App間的Implicit Intent,也因為這個機制,App可以呼叫系統或是其它第三方所提供的Activity的服務,例如:播話介面、相機…等等,僅需要透過Intent物件設定欲執行的動作、資料與類型,system launcher會列出符合相關條件的Activity,如果有多個就會列表供User選擇。
2011年11月15日 星期二 | By: 雞米

[食記] 韓江烤肉(台北大安區)

IMG_8047
由於禁吃燒肉吃到飽有一段時間了,前陣子突然很想吃烤肉,所以選了韓江這間韓式燒烤,之前都是吃日式燒烤,吃韓式烤肉倒是第一次。
2011年11月12日 星期六 | By: 雞米

[Android] 透過HTTP Request進行後端資料存取(以PHP為例)


在開發提供網路服務的App的首要目標,就是必須瞭解Android如何藉由HTTP Request向後端存取資料,Android提供兩種呼叫HTTP服務的類別:(1) Apache HttpClient (2) HttpUrlConnection。
2011年11月10日 星期四 | By: 雞米

[Android] GridView的基本使用教學



GridView是一種網格狀的二維視覺元件,將item依照順序放置於網格中顯示,它繼承了AbsListView這個類別,因此不難想像它的使用方式與ListView一樣,都是透過setAdapter的方式將data與View呈現在GridView中。
2011年11月6日 星期日 | By: 雞米

[Android] Local file的時效性管理

開發App時常會需要將一些暫存性的資料儲存在local端,例如:使用者的偏好設定、圖片的cache等等…,這些檔案將會一直存在,除非應用程式被移除,如果程式沒有針對local file的有效性進行管理,那儲存在local端的資料就有可能無限制的增長,相信這對於儲存資源較為有限的手機來說是個大問題。

程式碼說明

本文將以Internal storage的檔案儲存為對象,將每個File設定其有效的時限並根據file的最後修改時間與目前系統時間來計算其有效性,只要系統發現有檔案已超出有效期限,就會自動將其刪除,藉此達成local file的時效性管理。

//File validation(ms)
private final long FILE_AGE=3600000; 

private void checkValidation(String name, long age){
 //get file validated time
 long vTime = getFileStreamPath(name).lastModified()+age;
  
 //check file expiration
 if(vTime< System.currentTimeMillis()){   //如果失效
  //刪除檔案 
  getFileStreamPath(fileName).delete();
 }
}
2011年10月20日 星期四 | By: 雞米

[Android] 代號:Ice Cream Sandwich - Android 4.0 發佈!


Android 4.0 隨著新一代Google官方機「Galaxy Nexus」在今天公佈了,平台代號為: Ice Cream Sandwich (這個版本的圖看起來好可口...)。對於App開發者而言,Ice Cream Sandwich十分受到關注,因為Google在此次版本更新,將以往針對不同device類型分開的平台版本(2.x for phone and 3.x for tablet)合而為一了,也就是說從4.0開始,開發者可以用統一的平台版本進行開發,而且App將不會被裝置類型所限制,新的framework會依照不同裝置(手機、平板電腦、電視...等)提供良好的使用者體驗。
2011年10月14日 星期五 | By: 雞米

[Android] Disable ListView Item


ListView常用來顯示大量同性質的資訊,但有時候會遇到需要將List中的某些item disable的情況,例如:作為分隔資料的Divider或是因為特定條件取消某個item click事件。Android將ListView的所有item預設為enabled,如果要disable特定item必須自行繼承BaseAdapter,接下來將針對如何disable listview 的特定item進行說明。
2011年9月17日 星期六 | By: 雞米

[Android] 可多選的ListView (multi choice)


ListView除了用來呈現同性質的資料之外,也提供了選取模式(choice mode),讓使用者可以從List中勾選一個或多個row,本文將針對如何建立可多選的ListView與該如何取得選擇的資料進行說明。
2011年9月9日 星期五 | By: 雞米

[Android] layout_weight的妙用-讓View的大小以百分比率顯示(proportionate size)

Android所有的視覺物件(View)都是透過指定其layout_width、layout_height屬性來改變顯示大小,除了指定明確的數值外,另外還有特殊參數可以在特定需求下使用,例如,match_parent即填滿其父容器、wrap_content則根據其內容大小進行動態調整。

layout_width, layout_height並不支援百分比數值

有很多程式語言都可指定長寬一個百分比數值,讓其長寬以特定比例顯示,很遺憾Android的長寬屬性並無法透過指定百分比數值使其以特定比例顯示,但我相信對於需要開發適用於各種螢幕大小Application的程式設計者來說,長寬以百分比顯示這個功能是非常重要的。
2011年9月6日 星期二 | By: 雞米

[Android] Maven2 安裝教學

Maven是一套Software Project Management Tool,它透過POM(project object model)描述整個整案的結構,使得Project building統一化,相較於以往Java開發者常使用的Ant,Maven讓Project build更為便捷且專案間的lib(JAR)共用更為容易。
2011年9月1日 星期四 | By: 雞米

[Android] 如何加入Compatibility Package

什麼是Compatibility Package?

Compatibility Package顧名思義就是Android官方針對舊平台版本(e.g. 1.6)所不支援的API或是Android Framework沒有提供的函式庫,將其打包成Library,讓開發者可以使用非此平台版本所提供的API。
2011年8月30日 星期二 | By: 雞米

[Android] 如何讓不同Activity共用相同的Menu

Activity加入Menu一文中簡單介紹了如何建立選單,但是在開發Android Application常常遇到一個情況:一個Menu被多個Activity所共用,意思是指這些Activity在執行時,User按下Menu鍵時,都會顯示同一個選單。
2011年8月28日 星期日 | By: 雞米

[Android] 在Activity中加入選單(Menu)


Menu是Android Application特有的功能,當User按下Menu Button後,它會出現在程式的正下方,以提供其它額外系統動作。
2011年8月27日 星期六 | By: 雞米

[軟體] 好用的介面(UI)設計軟體-Balsamiq Mockups


在進行系統開發時,常常需要針對需求把系統雛型UI畫出來,以方便進行討論,由於沒有找到什麼很好的工具,所以常常是紙筆或是簡報軟體上面概略的示意,如果遇到需要修改時,通常沒辦法很方便快速的進行修改,當調整幅度大時,甚至是整張重畫,效率不是很好。
2011年8月26日 星期五 | By: 雞米

[食記] 氣分屋DINNING-笑和大阪燒居酒屋(師大夜市)

IMG_7815


笑和這家店在逛師大夜市時常常經過,卻不是很清楚它賣的是什麼(不懂日文),這次紀念日總算有機會嘗試看看了。在去之前有先查了一下它是間賣大阪燒的店,有別於一般日式料理店,它比較像是傳統日式居酒屋,因此,店裡面的氣氛就跟日本上班族下班後常去的場所,喝酒、吃小吃、聊天,店內有相當多擺設都是走日本風的。
2011年8月25日 星期四 | By: 雞米

[Android] TabHost建立Custom Tab


建立Tab View的三種方式系列文章中,介紹了Android Tab Layout的組成要件(Tab Host, Tabs, TabContentView)以及三種建立基本Tab View的方法,這一次把討論的焦點放在tab上,tab負責切換TabContentView的元件,與User互動密切。預設的tab顯示型式有兩種:文字、文字+圖,只要在建立tabSpec時呼叫setIndicator(CharSequence label)、setIndicator(CharSquence label, Drawable icon),就可以產生基本的tab。
2011年8月7日 星期日 | By: 雞米

[食記] 遠離喧囂的白話文學(嘉義市)

IMG_6849

今年七夕選擇在嘉義渡過,由於實在太久沒在這生活了,對於適合特殊節日用餐的地方還停留在好幾年前的記憶,有些地點早已不存在。還好有嘉義通朋友提供了「白話文學」這個選擇,否則七夕這種日子不早點決定吃什麼,到最後都會變成毫無選擇、草草了事。
2011年8月4日 星期四 | By: 雞米

[Android] 建立Tab View的三種方式(下)

建立Tab View的三種方式(上)一文中介紹了如何透過將Tab Content寫在同一個Activity的方式來呈現Tab Layout,包含以View Id、TabContentFactory等兩種方法。而建立Tab Content的另一種方式是將每個Tab的內容分別以不同的Activity呈現,以下將針對這個方法進行說明。

[Android] 建立Tab View的三種方式(上)

How to create Tab View in Android(by ID, by ContentFactory and by Activity)

TabHostAndroid負責產生Tab Layout的類別,它包含了兩個children,分別是TabWidgetFrameLayoutTabWidget負責處理與使用者進行互動的頁籤(tab)FrameLayout則是根據所選擇的tab來顯示相對應的內容。
2011年8月1日 星期一 | By: 雞米

[Android] TextView-如何讓過長的文字以逗點表示

android textview ellipsize1

一、問題描述

TextView在指定長寬的情況下,如果文字長度大於View的寬度時,程式會預設將其換行,TextView的高度就會被撐大,可能會破壞整個Layout呈現的感覺,當然你也可以選擇限制TextView的最大行數,但超出行數的文字會直接被截斷,可能會有訊息不完整的感覺。面對這樣的狀況,一般的作法可能是限制資料本身的長度或是將超過的文字以逗點表示,本文將介紹如何讓超出TextView寬度的文字以逗點表示。
2011年7月31日 星期日 | By: 雞米

[食記] 品鱻百元熱炒(台北市大安區)

前些日子為了慶祝如願找到理想工作,想找間熱炒店來慶祝一下,於是從台北在地朋友那打聽到六張犁那一帶有蠻多熱炒店的。才剛到那一區,就發現樂利路上的「品鱻」這間熱炒店外面擠滿了排隊的人,由於當天是小週末,來這吃吃喝喝的人特別多,所以當我們坐在桌子上點餐時,已經過了快一個小時了。

雖然今天我們只有兩個人用餐,但還是不怕死的點了六道菜,店內非常吵雜,吵到有時候聊天都必須用吼的,很有熱炒店的氣氛。跟一般熱炒店一樣,白飯是隨便你挖,醬料的種類也非常多種,可根據點的菜以及個人喜好自己調配。另外,店外有很多現撈的海鮮,是以時價計算的。
2011年7月28日 星期四 | By: 雞米

[食記] 北倉洞韓式料理(台北中山區)

IMG_6727

嚷嚷了快兩個月,今天終於去吃了北倉洞這間頗有名氣的韓式料理店,才到店門口就感受到人氣店家的威力,一個不算大的空間裡沒有一張桌子是空的,店裡的氣氛有點像一般燒烤店那種昏暗的感覺。
2011年7月23日 星期六 | By: 雞米

[食記] TASTY西堤牛排-羅斯福店

IMG_6708

前些日子老妹給了我兩張西堤牛排的招待券,於是趁著假日到附近的西堤牛排(羅斯福店)享受免費的牛排套餐。其實這並不是我第一次吃西堤,但卻是敗了相機後的第一次,所以決定往後吃飯時要常常拿它來記錄一下生活。
2011年7月21日 星期四 | By: 雞米

[Android] 動態更新Activity所管理的Dialog-以TimePickerDialog為例


Activity如何有效管理Dialog一文中,介紹了Activity將系統執行過程中建立的Dialog物件進行儲存管理,以方便程式開發者進行操作,例如:顯示(showDialog)、隱藏(dismissDialog)等。由於Dialog都是由Activity代為保存管理,一但Dialog透過onCreateDialog建立之後,往後系統操作此Dialog時都會重覆利用該物件,但假設一種情況,萬一所呼叫的Dialog需要根據不同條件(例如:系統的狀態、時間等等)而動態調整Dialog顯示的內容的話,這樣的機制好像就無法支援,除非針對每一種條件都建立一個Dialog,但這樣的程式將十分難維護。

[App] 好用的免費通訊軟體Viber在Android Market上架了


由於Android市佔率愈來愈高,iPhone上有名的免費VOIP軟體-Viber於今天在Android Market正式上架了。Viber自去年在iOS上推出後,就成為免費通訊軟體的優質App,廣受iPhone使用者喜愛,這對於Android使用者族群來說無疑是個好消息。
2011年7月20日 星期三 | By: 雞米

[Android] Dialog-Activity如何有效管理Dialog(Dialog Management)

Dialog是Android App裡使用頻率蠻高的組件,通常它用來暫時中斷User目前的動作並完成小型的工作(顯示簡短訊息或是提供選項進行互動)。一般Dialog都是在需要顯示訊息時,程式動態建立並顯示它,這樣的方法,對於Dialog使用頻率不高的Application是十分便捷的。但是對於使用頻率高的Application而言,所有的Dialog建立程式碼分散在各個函數中,執行時的Dialog物件管理以及日後維護的困難度將會提高。
2011年7月16日 星期六 | By: 雞米

[Android] AlertDialog-加入多選列表並取得選擇結果(Multi choice list)


Android手機的鬧鐘是大家常使用的功能,在選擇鬧鐘重複的週期時,畫面會跳出AlertDialog顯示星期一至星期日的選項List供使用者選擇多個時間點,今天要介紹的是如何在AlertDialog中加入Multi Choice List,並在使用者選擇Dialog的確認按鈕後,顯示所選擇的內容,這裡將以鬧鐘選擇週期日子的功能為例。
2011年7月15日 星期五 | By: 雞米

[Android] 內部儲存體(Internal Storage)的檔案系統讀寫(File I/O)

在開發App過程中常常遇到需要保存Device端資訊的狀況,最常見的就是使用者設定或是遊戲的進度…等。Android SDK提供了很多方法來進行資料儲存,包含了:Shared Preferences、Internal Storage、External Storage、SQLite與Network。

Shared Preferences提供了Key-pair的儲存型式,可以寫入primitive type資料;Internal、External Storage則將資料寫入Device端的內(外)部儲存體;SQLite是以local端小型資料庫型式儲存資料,可以使用一般資料庫query的方式取得資料;最後是Network則是將資料儲存在遠端,需要時再以Network connection取得。本文將針對Internal Storage的檔案系統使用進行說明:
2011年7月13日 星期三 | By: 雞米

[ActionScript] 手勢操作系列(四)-Zoom Gesture 中心點縮放(central point scale)

手勢操作系列(三)介紹了Flash所支援的Zoom Gesture,也實作了簡單的縮放功能,User只要將兩指放到縮放物件上使用Pinch手勢,TransformGesture Event就會自動取得Scale Rate,縮放功能可以利用這個Rate動態的進行物件的縮放。

上一篇作法的最大限制是物件縮放點都在左上(一般物件的預設註冊點,除非是使用Flash IDE針對元件進行註冊點更改),而一般常見的Zoom Gesture都是以兩指中點或是物件中心點來進行縮放,因此,本篇文章將針對如何實作一個可由中心點進行手勢縮放的物件進行說明(以Flex為例)。
2011年7月12日 星期二 | By: 雞米

[ActionScript] 手勢操作系列(三)-Zoom Gesture

今天要介紹的是另外一個常用的手勢操作-Zoom Gesture(又稱作Pinch Gesture),只要有使用過觸控式的Device,看到畫面上的物件總會習慣性的將兩指放在物件上,以收縮兩指的方式進行縮放,ActionScript當然支援這個常見的手勢,只不過如何縮放物件就必須自行實作,本文只提供簡單的作法,能夠將畫面上的Image以兩指進行縮放(左上角為縮放中心),至於更複雜一點的效果(例如:中心點縮放、以兩指中點為縮放中心…等)待後續有時間再提供相關說明。
2011年7月10日 星期日 | By: 雞米

[Android] 疑難雜症-如何讓Activity Title不出現在程式最上方

一、問題描述:

每個Android Application是由很多Activity所組成的,例如,簡訊程式的SendMessage Activity或是message list Activity,當啟動該Application時,系統會將其載入並在程式最上方顯示其Application名稱(如下圖)如果程式要營造Full Screen的狀態,這條title bar會顯得十分礙眼,偏偏Android預設的將它載入。



2011年7月6日 星期三 | By: 雞米

[App] 一用就上癮的慢跑App - Run Keeper

工作一年以來不知道是冬天的關係還是太懶惰,到今年夏天為止,我真正去運動的次數五根手指頭數得出來,體重也跟溫度一樣節節上升、屢破新高,因此下定決心要開始慢跑,也剛好讓我發現使用手機App來記錄跑步是一件很有趣的事情。
2011年6月26日 星期日 | By: 雞米

[ActionScript] 手勢操作系列(二)-Pan Gesture

Actionscript中的Pan手勢是指兩指共同放在欲操作的物件上,同時移動雙手的方式操作物件,要實作此手勢的功能,首先必須先註冊GESTURE_PAN事件,並在Listener中撰寫移動物件的邏輯。
2011年6月23日 星期四 | By: 雞米

[ActionScript] 手勢操作系列(一)-Flash/Flex所支援的Gesture操作

Pad-like載具的興起,讓更多使用者習慣以手指直接操作軟體,雖然手勢操作已經發展了很多年,但還是目前很受重視的技術,今年的WWDC Apple將Gesture與新一代的Mac OS Lion結合,讓一般電腦、筆電的使用者也可以在Touch Pad上使用手勢操作電腦,相信Gesture是軟體相關大廠不會放掉的領域。
2011年6月22日 星期三 | By: 雞米

[Android] AlertDialog-無法被Back與Search Button cancel的Dialog

AlertDialog有時候會在需要User Input時出現,Dialog會出現幾個選項讓使用者選擇好讓系統根據選項去執行接下來的動作,當有這樣的功能需求出現時,如何確保AletDialog不被使用者以其它方式取消掉進而造成系統無法正常運作的狀況是個重要的議題,最常見的就是「Back」以及「Search」這兩個按鈕造成AlertDialog直接被取消,本文將針對如何預防此種情況發生進行說明。
2011年6月19日 星期日 | By: 雞米

[Android] 疑難雜症-如何讓Application根據不同螢幕自動縮放(resizable)


一、問題描述:

當嘗試將以手機畫面大小(480×800)為設計對象的Application發佈到Android Pad時,原以為Application會根據Device Monitor大小自動縮放Application畫面,但卻發生程式的畫面大小仍維持在手機上顯示大小的問題(如上圖黃色區域)。
2011年6月7日 星期二 | By: 雞米

[Android] 疑難雜症-如何避免Activity在Device orientation改變時restart

一、問題描述:

前陣子寫個簡單的Activity,它負責顯示一個含有URL Image的Custom ListView,並把它發佈至Android Pad上測試,在嘗試改變其orientation時,發現Activity會發生重新載入的狀況,導致每改變一次Orientation,ListView就會重新載入資料一次,產生不好的使用者體驗。
2011年5月19日 星期四 | By: 雞米

[Android] 疑難雜症 - Flex AIR的HTML Component在Android上無法正常顯示

一、問題描述:

Flex AIR程式如果需要內嵌Html Content功能時,通常會使用Html組件(mx.controls.HTML)來呈現,但是直接將含有此組件的AIR程式發佈至手機平台,將會產生網頁內容無法正常顯示的問題。
2011年5月16日 星期一 | By: 雞米

[Android] 疑難雜症 - AIR Mobile porting 至 Android 時,從外部讀取的 swf 發生影格亂跳情形

一、問題描述:

最近由於工作需求,必須將之前以AIR開發的桌面程式發佈至Android Pad,其實porting過程中間遇到許多問題(檔案路徑、HTML Component…)等,但陸續都有找到解法,唯獨由外部載入的swf影片在Android上無法正常呈現,出現時間軸上的影格一直不斷播放,完全無法正常運作。
2011年3月29日 星期二 | By: 雞米

[Red 5] 疑難雜症 - SecurityError: Error #2123: Security sandbox violation: BitmapData.draw

一、問題描述:

前陣子開發即時視訊相關案子,選擇了Red 5這套open source的media server。其中有項功能需要截取來自server端即時視訊的畫面,使用的方式是以呼叫BitmapData.draw()來截取畫面,出現了「 SecurityError: Error #2123: Security sandbox violation: BitmapData.draw. can not access rtmp://xxx.xxx.xxx.xxx/olfademo. No Policty files granted access」。遇到這個問題,一開始的想法就是朝著跨網域安全性問題去解決,可是更改了crossdomain.xml設定還會沒辦法解決問題。