2013年10月28日 星期一

專案潛在殺手

專案潛在殺手
小型

特徵:.Button up規格設計
  • 較為保守,安全
  • 完全利用已能掌握之技術
  • 通常時程內能完成
  • 有充裕時間做測試及局部最佳化
2.風險:人員易閒置,規格規模較同類產品低

中型
特徵:以Top-down設計為多
  • 包含已知與未知技術項目
  • 通常邊做邊學其中部分技術
  2.風險:容易執著於技術的深入,忘記整體專案的各功能完整呈現

大型
特徵:以Top-down/Button up設計兼具
  • 求好心切,以致規格無法定義,或是定了之後又再新增
  • 缺點:程式人員人心惶惶不敢動手,深怕又要改規格

2013年10月20日 星期日

已知轉接器(adapter)可應用的GUI元件

  1. ListView
  2. Gallery
  3. AutoCompleteTextView
  4. MultiAutoCompleteTextView
  5. Spinner
  6. GridView
 當用到BaseAdapter時,在getView複寫時要注意:
  1. 此 getView為動態式呼叫,即畫面用到時才會呼叫
  2. 換言之可能造成重複new的情況:
    解法一:利用if (convertView == null) 做判斷
    解法二:利用ArrayList<所要NEW的View>事先做好

利用第三方Parse.com之推播軟體移植要點

(一)最基礎:僅能收到PUSH訊息
  1. 註冊帳號,並login到Parse.com,在下載SDK
  2. 依照QuickStart標籤之指示,實作相關程式於.java.xml
  3. 切換到Dashboard-->Push--->Send a push去新增Message
    • 少於180character
    • 可利用JSON格式
    • 可侷限群組收訊(利用Subscribe、subscription
(二)進階一:讓APP攔截到所Push的訊息(JSON格式)
1.要新增receiver於xml(PS.name要改成你的package name,action則可不改)
2.可考慮【訂閱頻道】 (Subscribe channel)練習:將SMS叫醒unlock改成push叫醒
(三)進階二: 讓APP能發出訊息給其他APP

2013年10月19日 星期六

Service+Receiver練習

四組程式互相對照:
V1:Activity自行發出Notification //此為對照用,因為Notification一般用在背景程式
V2: Activity+Receiver:由 Activity廣播給【自家】的Receiver,然後由Receiver發出Notification
//美中不足之處,此Activity並非結束(finish)
//而是移到後面(move To Back(true))
 V2-1: Activity無Receiver:由另一個 Activity發出廣播給【別家】的Receiver的示範方法
 V3:Activity+Service+Receiver:解決V2的缺點,讓Activity交出主控權給Service之後就finish();

2013年10月18日 星期五

Adapter(轉接器)相關重點

  1. 意義:可供3C產品的Adapte做比喻
    -->電的形式"轉變"  -->"資料形式"轉變
  2. Adapter常見的有:
    • ArrayAdapter:專精於字串資料
    • BaseAdapter:所有Adapter的基礎,專精於"複合式"資料(EX:圖文並茂)
    • Simple Adapter:專精於"靜態式(static)"表單
  3. ArrayAdapter的建構方式
    • 資料形式的決定
      1. String[ ]   -->利用new ArrayAdapter()建構子傳遞參數
      2.  list  -->利用new ArrayAdapter()建構子傳遞參數
      3.  resource的R.array  -->利用ArrayAdapter.createFromResource()參數傳遞
    • 版面形式的決定
      1. 自訂R.layout.mytext
      2. 官方定的android.R.layout.simple
      3. 其中android.R.layout.simple_list_item_2需特別處理
  4.  ListView的變化重點
    • Android為ListView特製一個ListActivity,可以省略調色盤步驟。也可以省略findView動作,改用getListView()
    • 資料的來源多樣化,例如
      1. DB:內定位置 or SDCard位置 or 來自internet
      2. File:內部空間 or SDCard or 來自internet
      3. Resource:StringArray
      4. 程式內宣告:String【】,List
    • ArrayAdapter之版面調整
      1. 必須回到父類別"BaseAdapter"複寫getView(...)方法,才能達成
      2. 首先要以super.getView(...)取得原版面之view
      3. 再以此view做findViewById抓出要修改的元件id
      4. 最後加以修改

2013年10月9日 星期三

關於Screen OFF -->On的一些應用

  1. Level-1:透過getWindow().setFlag()中的相關參數
    能讓Screen OFF -->On時,讓App Unlock。
    弱點:若此程式未被執行,則無法作用。
  2. Level-2:透過攔截Screen On的Receiver啟動Level-1的App,達成Unlock。
    弱點:若沒有人按下power鍵,使休息中的Screen OFF -->On,則無法作用。
  3.  Level-3:透過--遠端訊息(如簡訊、來電等等)之攔截,並以程式將Screen OFF -->On,則能啟動Level-2的App,連鎖反應,達成Unlock。
    優點:不須人為操作power OFF -->On。

2013年10月3日 星期四

Custom View-客製化視圖

  1. 隨你的喜好製作View元件
  2. 作法
    • New一個class,繼承View(或其子類別)
    • 需選取其【雙參數】建構子(Context、AttributeSets)
      Why三參數不可以,原因待查,第二個參數為傳遞相關屬性
    • 基本上都會複寫(overide) onDraw(Canvas canvas)或Draw(Canvas canvas)
    • 其Canvas參數(意指【畫布】可用來進行繪圖,EXcanvas.drawCircle
    • 其中會用到Paint物件,是作為畫筆()內定屬性有黑色、填滿模式
    •  
  3. 用法:
    • 回到調色盤,其歸類為【Custom & Library View】,按下refresh應能找到此文件。
    • 凡view所提共知相關方法都可以使用EX:visibility、OnClick、background color等
    • 甚至改寫Button可放文字上去。
    • 可以註冊onTouch,能對手是有更細分解:【按壓、滑動、離手】
  4. 客製元件的應用主要有兩類,一是整張畫布填滿畫面;二是將它視為一個元件
    因此,若要當成元件,通常會以onMeasure()複寫,並在其中以setMeasuredDimension(W,H)來規範其大小。
  5. 常見的畫筆用法有
    • 設定顏色
    • 設定筆粗
    • 設定筆觸風格【填滿或外框】
    • 設定消除鋸齒狀
  6. 圖示滑動Custom View之原理
    • 步驟一:按壓在(X0,Y0)->(10,10);
    • 步驟二:移動在(X,Y)->(11,10);
    • 步驟三:取得移動量(X-X0,Y-Y0)=(1,0);
    • 步驟四:取得View所在視窗的位置(v.getX(),v.getY());
    • 步驟五:加上移動量(v.setX(v.getX()+1),v.setY(v.getY()+0));

2013年10月2日 星期三

Android 常見的開關設計方式

  1. 開關不一定限於2段,可以為任意N段
  2. 開關的應用部限於【真實的】電器等控制,舉凡遊戲、廣告、最新消息等,都可見到其蹤跡
  3. 常見手法是利用一個變數或文字等 記錄狀態,然後搭配BUtton、Toggle Button、ImageView等作為VIEW的顯示。
    變數可以是:
    • boolean(另外宣告)
    • tag---->setTag(【同一種物件類別】),(【同一種物件類別】) getTag()
    • text---->setText(【】),getText()
    • for check box,ischecked()
      tag、text、for check box文件內部就有

關於圖片的重點

  1. android提供至少三種型式存放圖片
    • Resource<----以R.drawable.【file name】代號加以取用
    • Bitmap<-----以BitmapFactory加以生產製造,可搭配Matrix物件做【平移postTranslate、縮放postScale、旋轉postRotate】
    • Drawable<------可以 BitmapDrawable類別,將Bitmap轉成Drawable物件

  2. android 呈現圖片分前景、背景(需透過容器,也就是VIEW)
    • 前景,僅限於ImageView、ImageButton等
      (專業等級-本身即可【平移setX setY setTranslateX setTranslateY、縮放setScaleX setScaleY、旋轉setRotate X  setRotateY】
    • 背景:For所有的View(但有些View無法show,EX:EDITVIEW)
      View皆可setBackgroundDrawable()

修改專案名稱的步驟

  1. 到SDK Manager勾選【sample for SDK】
  2. Download 完成之後,有時要重啟Eclisp
  3. 選File->New->Other->選Android/AndroidSample
                                     -->勾選平台編號

修改專案名稱的步驟
  1. project name<----右鍵--->refacter--->rename
  2. package name<-----右鍵--->refacter--->rename
  3. java file name <-----右鍵--->refacter--->rename
  4. Manifest 之 package name<----打開Manifest.xml修改即可
  5. 因為步驟4,所以R.java也自動換package-->所以要將所有的import【舊的package name】.R;從java檔全部刪除
  6. PS:另外可改可不改的有layout name、app name(改較好)、menu name

android常用功能補充

  1. 立即撥號:將ACTZON_DIAL改成ACTION_CALL,並加上Manifest的use permission->CALL-PHONE
  2. 地址轉經緯度(或經緯度轉地址)
  • 有套件,Geocoder可用,正式介紹地圖時再談
  • 可先用線上軟體做轉換(www.mtgeoposition.com)
  3.如何安裝APP【.apk】
  • 藉由網路BY google play 或BY any file server(EX:Dropbox)
  • 藉由檔案總管類型之APP  =>一般手機有內建,或到google play下載
  • 藉由程式指令
  • 藉由adb(但限於ROOT權限之手機ON模擬器)

練習MENU+Activity切換

  1. Log練習:試將任一記錄log日誌的程式,加上一個Menu Item:Read Log,然後將Log內容以ScrollView+TextView加以顯示
  2. APP練習:試九九乘法表APP之測驗App和表格App結合一個Project,然後提供方法做切換。
  • 整合方式可以是A整合B,也可以是B整合A。(記得java,xml,Manifest都要調整)
  • 若不希望啟動太多【內容相同】的視窗,可藉由
           (i) Manifest->Application->Launch Mode->singleInstance或
           (ii) intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
  • Android提供另一種整合專案的方法,藉由【library】
          (i)B專案:【按右鍵】-->properties-->Android-->勾選Islibrary
          (ii)A專案:【按右鍵】-->properties-->Android-->點擊【Add】,出現library選單,
                         加以選取

PS注意,若在A.java找步道B.class,可利用游標加以選取Input
 PS注意,Manifest.xml要自行輸入完整【package name.class name】之Activity 註冊。

2013年10月1日 星期二

BACK鍵操作重點

至少有兩種方法攔截BACKKEY的按壓動作
  • 方法一:複寫onBackPressed()  //簡易
  • 方法二:
結束視窗常見用法
  • finish()
  • system.exit(0); //結束程式
一般處理BACKKEY的手法
  • 避免誤觸,在 onBackPressed()加上alertDialog加以警示,確認真要離開
  • 另外提供:
  1. 以一般Button提供
  2. 以action  BAR 提供
  3. 以MENU item提供

SQL Injection--造成網頁被駭

Select * from contacts Where UserName='" + username + "' and Pwd='" + password + "'

這是以前我常用的SQL語法,尤其是用到登錄畫面。
原來這會造成漏洞 資料隱碼

尋找DOM節點範例

<script>
function fun1()
{

    var html = document.documentElement;
    // alert(html.nodeName);
   
    if (html.hasChildNodes())
        {
        // alert("Y");
        }
    else
        {
        /// alert("N");
        }
   
    var node1 = html.firstChild;
    var node2 = node1.nextSibling;
    var pElement = document.createElement("p");
    var text = document.createTextNode("Hello World");
    pElement.appendChild(text);
    node2.appendChild(pElement);
}



</script>

SQL-別名語法、Right Outer join語法、 ISNULL語法

select ISNULL(C.CName,'主選單'),D.CName from Category C Right Outer join Category D on C.ID=D.MainID

別名語法:就是把表格名稱旁新增別名。Ex:Category C  或 Category D。
inner join語法:

andrid Menu操作重點

4.Menu Item如何以Action View呈現?
  • 到XML,將properties中的【Show As Action】加以【Browse】
  • 若只選【ifRoom】或【always】,則以顯示圖片(無圖片則題示文字)
  • 若加選【withText】,則圖+文
  • 舊版(2.X)則維持舊的MENU題示方式【MENU由下長上來】【MENU item可以塞圖片】
5.如何讓Menu item起作用:
  • 實作【onOptionsItemSelected 】
  • 藉由【item.getItemId() 】與R.id. item定義時給的ID   相比較
  • MENU所定義的item,其ID和layout中所定義的文件ID放在同一個class id中


3.其他重點
  • 要會以MENU工具新增MENU ITEM(記得給TITLE名稱)