2011年4月8日 星期五

[Android]Project coding注意事項

變數命名:名稱不怕長,怕的是你兩三個月後看不懂他。

範例
 float m_fCircleCenterX = 100.0f; //m_代表是類別等級的變數,別忘了一個.java就是一個類別。
 boolean m_bRunning =true; //f:代筆他的型別為float
                                                //名稱:就盡最大可能表現出它的意義,向這個就是圓心的座標X
                                               //,當發現盡力還是表達很模糊,就請一定要加上註解。
float l_fdt = 0.1f;                  //l_區域變數
long l_nStartTime=0         //n:Number

邏輯判斷式:開頭上註解,解釋其內容。在邏輯太多層下,不容易辨識括弧,在末括號加上註解。

  //判定手指點擊是否在圓內。
if((m_fCircleCenterX - m_fCircleRadius) <= e_fPosX &&
e_fPosX <= (m_fCircleCenterX + m_fCircleRadius))
{
if((m_fCircleCenterY - m_fCircleRadius) <= e_fPosY &&
e_fPosY <= (m_fCircleCenterY + m_fCircleRadius))
{
m_bIsTouchDownCircle = true;
text=e_fPosX+","+e_fPosY;
}ifend

}ifend

XML部分:

id也請讓他意義化,text要讓他能符合多國語系的格式,也就是要text命名要呼叫value裡面的資源檔,而不是直接設值
,google應該可以找到不少資源。
Layout要可符合各種Size的手機,[Android] 利用XML來呈現Android的畫面後半有大概提到一點。

範例:回到首頁按鈕
<ImageButton
android:id="@+id/ButtonBacktoHome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Back"
android:layout_x="120px"
android:layout_y="90px"
android:src="@drawable/memo"
/>

[Android]利用Java Class繼承View來呈現Android畫面

要設計Android的畫面有兩種方式:
一種是仿間書本都會教的第一招,利用xml來寫畫面。
二種則是用java來寫,透過class繼承view這個類別來達成。

目標:
1.利用java來呈現android手機畫面、
2.滑鼠點擊螢幕拖動圖形。

先開一個新專案,Application name是會顯示在手機軟體列上的名稱,對一個軟體的辨識度有很大的影響,Package name是這個Project的資料夾結構,最內部就是放著.java檔,通常都習慣把網址倒過來寫,Create Activity是替你先創造一個Activity,一個Android軟體一定要有一個Activity(活動), 手機才能執行,這裡就先幫他取名,Mini SDK Version就看你上面勾選哪個版本就照用吧。


除了我自己上的註解外,這是剛開始最乾淨的Activity。我們就是要把  setContentView(R.layout.main);原本是抓取資源檔 layout內的main.xml改成我們自己寫的java class。


在專案上點右鍵,新增一個Class。


剛開始最乾淨的class


先讓他extends View,會有錯誤。


再利用ctrl+shift+O,讓系統自動幫你import。import之後還是會有錯誤,是因為View有規定你必須要擁有建構函式。


 在錯誤紅線上停留,他就會提示你該要怎麼做。建構函式有了,錯誤就解決了。

  繼承View的class架構好了,Activity就拿來用吧,利用setContentView(m_MyView_01)。

複寫onDraw,Canvas就如同畫布一般。


canvas.drawColor(顏色),顏色可以是色碼,或是android API設的常態變數。


Color.呼叫常態變數



以40為間隔劃出水平線。

呈現結果。

再畫垂直線。

畫圓。

將圓的座標直徑設為全域變數。

判斷手指是否有點到圓。

 移動圓以及離開圓的動作function

Thread設置,這樣才可以一直刷新圓的位置。

設定優先權。



在Activity中複寫onTouchEvent,偵測MotionEvent。

android api的常態變數。

手指按下、移動、拿起的位置偵測,再丟給View的function處理。

之前發現圓不會動!!!原來是忘了設true!!!

結果測試的結果,不在圓上也可以移動圓!!!怪了!!!

原來是我在移動圓的判斷是這邊寫錯啦...找好久。m_bIsTouchDownCircle是boolean變數啦!

直接放if內就好了。
                  
最後結果。



[Android] 模擬器太大如何調整Size

        你要改變模擬器的比例,例如320x480轉成480x800(HTC Desire的size),卻因為筆電螢幕太小,模擬器超出螢幕過多時,就可以選擇Scale等比例縮小。

先開啟Android SDK and AVD Manager,選擇模擬氣候按Start...

  勾選  Scale display to real size,調整參數就可以放大縮小了。

呈現出480x800的縮小版介面

比較麻煩的是每次都要透過Android SDK and AVD Manager開起來選擇,不能在debug 、run as的時候選擇。

[Android]將自行開發的Android程式安裝進Device內

編寫玩自己的Android程式要放進手機裡有兩種方法:
一種是把.apk檔放入SD卡內安裝。(還有問題)
二種是把Android手機接上USB直接編譯上去。


先來介紹第一種:
你要將 軟體名稱.apk檔,從workspace\專案名稱\bin 內抓出來直接放到SD卡內,再透過類似檔案總管的手機軟體將她打開,選擇安裝就可以了。但是如果你有使用googlemap api,這樣直接到手機裡面會有指紋簽署(fingerprint)的問題,在使用google map api的畫面上,會無法開啟地圖,目前我還不知道如何解決。

每個專案的.apk,都會在相似的位置。



第二種方法,也是比較方便的方法,就是透過eclipse Run as 或是 Debug as 的狀態下選擇你要執行的Device,一般沒有手機就是直接用虛擬機器執行。這方法不會有google map api認證上的問題。

    別忘了先更改Run Configurations。

在Run Configurations更改Deployment Target為Manual,才可以手動選擇要開啟的device。


看到手機裝置,點下去就對了。同時也可以利用實體手機同時偵錯。
              
例外狀況:你可能接上手機後還是沒有看到Device在上面,那很有可能是沒有裝手機的driver,像我是HTC desire的手機,剛開始也沒抓到,只要安裝HTC sync,裡面包含驅動程式,就可以抓的到了!各家驅動程式在官網上應該就都有了。

[Android] 利用XML來呈現Android的畫面

要設計Android的畫面有兩種方式:
一種是仿間書本都會教的第一招,利用xml來寫畫面。
二種則是用java來寫,透過class繼承view這個類別來達成。

目標:
1.介紹利用xml來呈現Android手機的畫面的編輯平台、
2.ADT for Eclipse的方便性、
3.以及如何讓軟體能夠符合多種size的螢幕。

Project->res資料夾->layout資料夾,就是我們放xml檔的地方。
中下處選擇Graphical Layout,就會以圖形的方式呈現畫面,元件的使用在ADT for Eclipse也做的非常方便,palette內就可以選擇你想要的元件。例如layouts是包含各種的排版方式,拖曳到畫面上就可以使用了。

上方的下拉選單,可以呈現出你現在layout在不同size的螢幕下會是怎樣的情況,當然要做到一次符合每個size的layout是有點困難(當然還是有辦法,後半會說到),Portrait是表示為直的顯示方式,Theme我還不是很清楚,但似乎可以選擇畫面是沒有大部分手機上常出現的狀態列,再來是選擇你layout的版本,目前是Android2.1-update1。

ADT強大的地方就在你不用一直透過程式碼來改變元件位置,例如此圖就是在RelativeLayout的layout下還是可以透過滑鼠來排版。

元件layout的高度、寬度,也可以透過右鍵選項中方便的勾選,或是點擊other來輸入數值。

元件的Properties也可以透過直接勾選的方式設置,跟之前的ADT比較起來,你可以更快速簡單的選擇你要更改的參數。

若不想透過視覺化的環境來調整介面,只要下方選擇main.xml就可以看到程式碼的部分,雖然ADT提供的環境很方便,但是更改xml code才應該是程式人員的基本功。



如何讓軟體符合多種的螢幕大小?
若是你今天要做符合多種螢幕size的軟體,可以在res資料夾下新增一個"layout-數字x數字"的資料夾,當程式在手機上運行時,會自動選擇符合他size的layout。


例如現在新增一個跟我desire一樣size的"layout-480x800"。當然你其他layout有的檔案這裡也要




[Android] Debug、設中斷點 、Log、DDMS

盡量使用 Debug as 來跑程式,因為還可以設中斷點來看Variable目前的數值是多少。

滑鼠右鍵新增中斷點


會詢問是否開啟Debug的介面

進入到完整debug畫面,右上角可看Variable目前的值,中左是原本的java code,中右是outline,左下是console,右下是LogCat 有即時錯誤發生可以在這裡看到,按右上角隱藏的java可以回到一般編輯畫面。

就算沒有進入完整debug畫面,滑鼠放在變數上,還是可以看到目前的值為多少。


DDMS的畫面,可以選擇要偵測的Device,同時傳送經緯度或是SMS給emulator,搭配LogCat看是否有錯誤發生。

左上是Devices選擇,中左是Emulator Control,下面是LogCat,右半Thread、Heap、Allocation Tracker、File Explorer 目前還不知道可以幹嘛。

[Android]Android Google map api key註冊

要先利用MD5指紋認證書(fingerprint)產生指紋碼,指紋碼的來源有兩種,
一種是利用C:\Program Files\Java\jdk1.6.0_24\bin下的keytool 自行註冊。(可是我失敗了)
二種是直接拿安裝Android sdk時所自動產生的debug.keytool,在路徑C:\Users\Lin\.android內。
debug.keytool的位置。



進入到C:\Program Files\Java\jdk1.6.0_24\bin下輸入:
keytool -list -alias androiddebugkey -keystore "接檔案位置" -storepass android -keypass android

獲取MD5認證指紋,注意keytool的語法都是前面 "-" + 語法,中間不能有空個。 
之後再把這個MD5認證丟到google網站就可以獲得api key了!

參考網站:

[MAC]利用VNC軟體遠端管理mac mini server

我希望利用win7遠端控制mac mini server以方便架站,但因為作業系統的不同,所以只能使用VNC軟體或是換一台macpro遠端登入。

目標:win7遠端控制mac mini server

軟體: TightVNC http://www.tightvnc.com/
          安裝在win7,過程很簡單,只安裝Viewer就好,因為不用利用mac登入win7。

再來是要設定mac得部分,mac不用灌任何軟體,只要開啟設定就好 !
首先先到系統偏好設定裡,選擇分享。

點進來之後可以看到有很多選項。先來介紹兩個
1.遠端登入:這裡是透過ssh登入mac,呈現的畫面會是存文字畫面,速度較快。因為我沒有要使用到所以先不開啟。



2.遠端管理:這裡提供兩種方式,一種是你透過同樣是apple作業系統的電腦登入,這種情況下就要把,允許下列使用者存取,加入你想讓它控制的使用者。

並且透過選項,設定你要讓遠端控制使用者登入後的權限。

但因為今天我們是透過win7登入,所以這些允許使用者,其實也不用設定!
重點是在電腦設定的部分!

你要把 "VNC檢視程式可以使用密碼來控制螢幕"給勾選起來,並且設定密碼。

注意!TightVNC所連線的密碼,可不是使用者的密碼喔!而是這裡設定的密碼!


開啟已在win7灌好的TightVNC ,打上IP位置,並且建議選擇High-speed network。

輸入密碼,就可以登入嚕!!


參考資料: