小試身手卻發生小問題: 直接放在onCreate裡,卻放不出音效? why?
1. 嘗試了很多次都不能在onCreate裡播放音效,但很多時候需要在一開啟Activity時就發出音效。
2. 原來問題出在於播放音效的時候,音效檔尚未加載完成所以在DDMS上會出現sample not ready的訊息,沒有完成載入音效檔導致不能播放。
小試身手卻發生小問題: 直接放在onCreate裡,卻放不出音效? why?
1. 嘗試了很多次都不能在onCreate裡播放音效,但很多時候需要在一開啟Activity時就發出音效。
2. 原來問題出在於播放音效的時候,音效檔尚未加載完成所以在DDMS上會出現sample not ready的訊息,沒有完成載入音效檔導致不能播放。
小試身手前的小知識
1. 使用SoundPool有限制,播放的音檔不可以超過 「1mb」大小,所以要放音樂就不能使用這一個方法,要使用MediaPlay
2. SoundPool很容易莫名其妙的自動終止,在使用pause和stop方法時很常很莫名其妙。
Step1 先了解這一行之參數
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
本篇目的為實做手機上之載入中對話方塊,如同在電腦上開啟網頁等待時,滑鼠圖示總是會出現小沙漏,或是在安裝程式時,會出現一條跑讀著已完成幾%之圖示。
在Android裡必須透過ProgressDialog來執行,此需特別留意Progress Dialog必須要在背景程式執行完畢之前,以dismiss()方法關閉取得Focus對話方塊,否則會陷入無限迴圈中。第二點要注意的是執行緒當中不可有任何變更context或是Parent View的任何狀態、文字輸出等事件,這是因為執行緒裡面的Context以及View並不屬於Parent,兩者之間也沒有任何關係。
小試身手小範例
1. 使用瀏覽器開啟
Uri myBlogUri = Uri.parse("http://kuikui.javaeye.com");
returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);
由於撥打電話屬於手機底層的服務,與使用者隱私及通話費用息息相關,所以必須取得相關權限,首先要在AndroidManifest中新增一個uses-permission,並宣告android:name=”android.permission.CALL_PHONE”使用權限。
java檔
本範例將要介紹如何自動判斷輸入字串,利用TextView的Linkify物件,就可以簡單實現到此目的,Linkfy能夠讓系統動態擷取,並迅速做出判斷。假設輸入的是電話號碼,就會提供電話撥打連結,假設輸入的是網址,就會提供網頁連結。
實作方法是利用EditText.setOnKeyListener(),輸入資訊時抓資訊來判斷。按下文字後就可開啟對應程式。
本範例將用EditText以及TextView示範如何捕捉User輸入的文字,同時即時取得文字,同步顯示於TextView,這步驟相當於網頁的Ajax技術,即時輸入即時輸出效果。
實現此功能關鑑之處在於利用EditText.setOnKeyListener來攔截EditText鍵盤輸入事件,需於其中複寫onKey方法,在onKey()方法中,將EditText.getText()取出的文字,顯示於TextView當中。
本範例將製作一個計算機,利用簡單的按鈕組合、不同的按鈕事件,來處理輸入的數字,輸入數字及點擊按鈕不同,結果也隨之不同。本範例為了使輸入小數時也可以使用,將數字都設為float(浮點數),以避免例外錯誤發生。
小試身手小範例
瀏覽相片時,流暢拖曳圖片的操作方式總是非常吸引人,在Android上要實現必須用到的技巧不少,包括: android.content.Context、android.widget.BaseAdapter、android.widget.ImageView等等,這樣子的技巧通常使用在設計相簿、圖片型態的選擇器上。
首先,需了解何謂Context以及BaseAdapter,在Activity當中Context就如同是一張Canvas畫布,隨時等著被處理或是覆蓋,本範例在Layout布局一個Gallery物件,再透過BaseAdapter容器存放Gallery所需要的圖片。
除了Activity之間的切換之外,常常需要在呼叫另一個Activity的同時傳遞資料,所以就必須要利用android.os.Bundle物件封裝資料的能力,將需傳遞的資料或參數,藉由Bundle來傳遞於不同Intent之間。
小試身手小範例
本範例為一個簡易的標準體重計算器,首先在Activity1中收集User輸入的資料,在離開Activity1的同時將User填寫的資料傳遞到下一個Activity2計算並輸出。
假設手機頁面切換只需要置換背景圖示、文字內容、文字顏色及排版等等,只需要用到setContent就可以置換layout(請參考此篇http://style77125tech.pixnet.net/blog/post/13432877),但如果是要Activity的置換就不能僅靠改變layout就好,需要移交主控權到另外一個Activity,移交主控權的方法,可在主程式裡使用startActivity()這方法來呼叫另外一個Activity,但是關鍵並不是在這一個startActivity這個方法,而是在Intent(就如同英文字意一樣,想要、企圖之意)這個物件,告訴主程式自己是什麼,想要到什麼地方去,這就是intent物件所處理的事。
小試身手小範例:
Java檔 (兩個Activity兩個class)
手機的世界哩,實現手機頁面的轉換最簡單作法為改變Activity的layout,只要善加利用這個,是可以做到很多頁面轉換的效果,也可以讓使用者選擇自己喜歡的系統樣式、背景圖案及文字顏色等等,直接按套用來改變版型。另外使用setContentView來換置頁面還有一個很棒的優點,就是所有程式裡的變數皆存在相同的狀態,無論是類別成員變數、類別函式等等,都可以在一個Activity下取得,沒有參數傳的的問題。比如說:訂票系統的程式,首先layout01先讓使用者輸入資料(姓名、電話、信用卡卡號等等),下一畫面layout02為確認畫面讓使用者進行確認,最後一畫面layout03進行刷卡交易的動作。
本篇在討論一個Activity下,如何做到手機頁面轉換,而不是切換Activity! 切換Activity請看另一篇文章 http://style77125tech.pixnet.net/blog/post/13440183
按鈕在許多windows視窗應用程式中,是最常見的「控制項controls」,然而由按鈕所觸發的事件處理,稱之為Even Handler,只不過在android的世界裡,按鈕事件是由系統的Button.onClickListener所控制。
小試身手小範例:
在Activity中佈局一個Button,並設計這個按鈕的事件處理,當按下時就變更TextView的字。按鈕事件裡面被覆寫的onClick(View v)方法,此方法唯一的參數是View型態的變數v,這個變數所指的是來自父層(parent)中的ContentView,因此可透過「v.*」來改變父層view的狀態或屬性。
一個event listener在view類別中,是一個介面並包含一個callback的方法,當使用者與View進行物件互動,此listener就會被註冊,這些方法就會將由android framework所呼叫。
方法說明如下:
onClick():屬於View.OnClickListener 表示當使用者觸碰到某一個項目時。