第 2 節 介面佈局檔 第 1 項 說明 第 2 項 原始碼 第 3 節 主程式開發 第 1 項 主程式 - 基本設定 第 2 項 主程式 - 產生亂數 第 3 項 主程式 - 數字靠邊 數字加總 第 4 節 加入手

Size: px
Start display at page:

Download "第 2 節 介面佈局檔 第 1 項 說明 第 2 項 原始碼 第 3 節 主程式開發 第 1 項 主程式 - 基本設定 第 2 項 主程式 - 產生亂數 第 3 項 主程式 - 數字靠邊 數字加總 第 4 節 加入手"

Transcription

1 Android 講義 目錄 第 1 章 資料存取... 1 第 1 節 使用 SharedPreferences... 1 第 1 項 介面佈局檔... 1 第 2 項 建立主程式的內容 - 儲存偏好設定... 1 第 3 項 驗證儲存偏好的動作... 3 第 4 項 建立主程式的內容 - 提取偏好設定... 3 第 2 節 簡單使用 SQLite... 5 第 1 項 介面佈局檔... 5 第 2 項 建立 SQLiteOpenHelper 的子類別... 5 第 3 項 修改主程式... 7 第 4 項 驗證看看 -sqlite3 指令... 9 第 5 項 顯示資料表內容... 9 第 2 章 專案猜數字比大小 第 1 節 建立專案 第 1 項 建立介面佈局檔 第 2 項 主程式 第 3 章 專案建立 WebView 程式 第 1 節 修改 AndroidManifest.xml 檔案 第 2 節 修改 main.xml 第 3 節 建立 mainwebview.xml 第 1 項 建立 Activity 主程式 第 2 項 建立 golink01 程式 第 4 章 專案音樂播放程式 第 1 節 最陽春的音樂播放程式 第 1 項 建立空白的新專案 第 2 項 加入 MediaPlayer 物件 第 3 項 改善一下, 離開程式時也能停止音樂的播放 第 4 項 按下播放按鈕才開始播放 第 5 章 專案 2048 遊戲 第 1 節 遊戲介紹 第 1 項 玩法 第 2 項 程式運作概念 Android 講義 v0.8 i 王振民

2 第 2 節 介面佈局檔 第 1 項 說明 第 2 項 原始碼 第 3 節 主程式開發 第 1 項 主程式 - 基本設定 第 2 項 主程式 - 產生亂數 第 3 項 主程式 - 數字靠邊 數字加總 第 4 節 加入手勢 第 1 項 移除 Button 物件 第 2 項 加入手勢 第 6 章 專案 GPS 服務 第 1 項 設定 manifest 的使用授權項目 第 2 項 建立介面佈局檔 第 3 項 建立連結資料庫的 dbhelper 第 4 項 建立主程式 第 5 項 建立第二個程式 - 佈景主題 第 6 項 建立第二個程式 - 主程式 Android 講義 v0.8 ii 王振民

3 第 1 章 資料存取 第 1 節 使用 SharedPreferences SharedPreferences( 存取偏好設定 ) 請建立新的專案, 分別再依以下動作進行 第 1 項 介面佈局檔 1. 建立 TextView, 顯示文字為 姓名 2. 建立 EditText, 設定 id 為 et01 3. 建立 TextView, 顯示文字為 興趣 4. 建立 EditText, 設定 id 為 et02 5. 建立 Button, 設定 id 為 bt01, 顯示文字為 儲存偏好設定 6. 執行程式, 看看是否可以正常顯示介面佈局檔的內容 第 2 項 建立主程式的內容 - 儲存偏好設定 1. 請開啟主程式, 進行 et01 et02 bt01 等物件的宣告 物件的實體建立, 並且將 bt01 設定傾聽程式, 參考程式碼如下 : public class MainActivity extends Activity { EditText et01; EditText et02; Button bt01; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setupview(); private void setupview() { Android 講義 v0.8 1 王振民

4 et01 = (EditText) findviewbyid(r.id.et01); et02 = (EditText) findviewbyid(r.id.et02); bt01 = (Button) findviewbyid(r.id.bt01); bt01.setonclicklistener(bt01click); { Button.OnClickListener bt01click = new Button.OnClickListener() public void onclick(view v) { ; 2. 在 bt01click 方法裡輸入相關程式, 參考範例程式如下 : { Button.OnClickListener bt01click = new Button.OnClickListener() public void onclick(view v) { // 將資料儲存到 SharedPreferences 的 sp01 物件. SharedPreferences sp01 = getsharedpreferences("t04shareprefs", 0); sp01.edit().putstring("et01text", et01.gettext().tostring()).putstring("et02text", et02.gettext().tostring()).commit(); // 顯示一個 Toast, 一秒鐘. Toast.makeText(getApplicationContext(), " 資料儲存完成 ", Toast.LENGTH_SHORT).show(); ; 3. 執行程式, 在二個欄位裡輸入資料, 再按一下 bt01, 使系統觸發事件, 執行 bt01click 的動作 Android 講義 v0.8 2 王振民

5 第 3 項 驗證儲存偏好的動作 前項動作執行後, 我們可以驗證看看 驗證動作如下 : 1. 開啟命令提示字元 2. 執行 adb shell 如果沒有執行 顯示找不到命令的話, 表示系統的 path 路徑沒有指定到 adb 的位置 adb 的程式是放在 android-sdk 目錄下的 platform-tools 的目錄裡, 可以手動切換路徑 也可以考慮將它的路徑加入到 path 環境變數裡 3. 進入到 adb shell 後, 可以執行 ls -l 顯示目錄裡的內容, 使用 cd 執行切換工作目錄 以我的例子來看, 我需要先執行 cd /data/data, 在這裡就會看到系統所安裝的所有資料夾, 一個程式會有一個資料夾, 資料夾的名稱就是 package name 4. 我的 package name 是 com.example.t04sharepreference, 因此, 我就需要再輸入 cd com.example.t04sharepreference, 再使用 ls -l 顯示目錄裡的內容, 會看到有一個 shared_prefs 目錄, 裡頭有一個 t04shareprefs.xml 的檔案, 這個檔案就是我們所儲存的偏好設定, 它是一個標準 xml 格式的檔案 5. 我們可以執行 cat t04shareprefs.xml 看看裡頭的內容, 其實就是我們在 android 的程式裡所輸入的內容 第 4 項 建立主程式的內容 - 提取偏好設定 我們會希望程式每次執行時, 都能先將前次所儲存的偏好設定, 主動的讀取 出來, 程式撰寫的動作如下 : 1. 我們在 findview 方法裡, 呼叫一個 loadsharedprefs 的方法, 參考程式 碼如下 : private void setupview() { et01 = (EditText) findviewbyid(r.id.et01); et02 = (EditText) findviewbyid(r.id.et02); bt01 = (Button) findviewbyid(r.id.bt01); bt01.setonclicklistener(bt01click); loadsharedprefs(); Android 講義 v0.8 3 王振民

6 private void loadsharedprefs() { 2. 在 loadsharedprefs 方法裡, 使用 private void loadsharedprefs() { /** * 第 1 個參數設定我們的偏好設定的檔案名稱是 t04shareprefs, * 第 2 個參數表示只允許程式本身開啟, 不允許其它程式使用. */ SharedPreferences sp01 = getsharedpreferences("t04shareprefs", 0); /** * 取得之前儲存的資料, 如果沒有的話, 預設傳回 " 請輸入資料 " 的字串 * 這裡為了簡單及方便理解, 因此另外宣告二個字串變數儲存資料 */ String s01 = sp01.getstring("et01text", " 請輸入資料 "); String s02 = sp01.getstring("et02text", " 請輸入資料 "); et01.settext(s01.tostring()); et02.settext(s02.tostring()); 3. 請先離開程式, 再重新執行程式, 應該會發現前次輸入的資料會自動填 入到 et01 與 et02 的欄位裡 練習題 : 目前的偏好設定儲存, 必須按下 儲存偏好設定 的按鈕, 才會有作用, 請將程式修改, 當使用者直接離開程式時, 也能由程式將資料儲存後再離開程式 Android 講義 v0.8 4 王振民

7 第 2 節 簡單使用 SQLite 我們要使用 SQLite 的話, 需要使用 SQLiteOpenHelper 以及 SQLiteDatabase 這二個類別來建立 以及存取資料庫, 其中的 SQLiteOpenHelper 是一個幫助類別 (Helper Class), SQLiteOpenHelper 主要的目的是協助我們建立資料表, 以及資料庫的版本管理, 因此, 我們需要建立一個繼承自 SQLiteOpenHelper 的類別 由 SQLiteOpenHelper 所建立出來的資料庫, 是一個 SQLiteDatabase 類別的物件, 因此, 我們可以透過 SQLiteDatabase 所提供的方法該行新增 刪除 更新資料表的內容 以下請建立新專案, 再依照底下的動作進行 第 1 項 介面佈局檔 1. 建立一個 TextView, 顯示文字為 只存記事本 2. 建立一個 EditText, 設定 id 為 et01, 顯示文字為空的 3. 建立一個 Button, 設定 id 為 bt01, 顯示文字為 儲存記事 4. 建立一個 TextView, 設定 id 為 tv01 第 2 項 建立 SQLiteOpenHelper 的子類別 1. 在 src / 套件名稱 按 右鍵 / New / Class 2. 在 Name 的欄位輸入 mydbhelper, 做為類別的名稱 3. 按 Superclass 右方的 Browse 在上方的 Choose a type 欄位輸入 SQLiteOpenHelper, 底下的 Matching items 會顯示符合的項目, 點選該項目, 按 OK 5. 按 Finish, 建立類別, 同時, 依系統的建議, 修正錯誤的訊息 6. 目前為止, 程式碼類似以下內容 : public class mydbhelper extends SQLiteOpenHelper { public dbhelper(context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub public void oncreate(sqlitedatabase arg0) { Android 講義 v0.8 5 王振民

8 { public void onupgrade(sqlitedatabase arg0, int arg1, int arg2) 7. 修改 oncreate() 的方法 ( 也就是覆寫父類別的方法 ), 我們要建立自己要 使用的資料表, 程式碼參考如下, 其中的 arg0 是系統在 oncreate 方法裡自行宣告的一個 SQLiteDatabase 物件, 我是直接使用這個名稱, 也可以修改物件的名稱 ( 例如改為 db), 使物件名稱比較具有意義 : public void oncreate(sqlitedatabase arg0) { arg0.execsql( "Create Table t05note (" + "_id integer primary key autoincrement, " + "tnote text)" ); 8. 修改 onupgrade 方法, 內容參考如下 : { public void onupgrade(sqlitedatabase arg0, int arg1, int arg2) arg0.execsql("drop Table if exists t05note"); oncreate(arg0); 9. 這個檔案完成了 Android 講義 v0.8 6 王振民

9 第 3 項 修改主程式 1. 宣告各個物件 以及建立 findview 方法, 參考如下 : public class MainActivity extends Activity { SQLiteDatabase db01; mydbhelper dbhelper01; String databasetable = "t05note"; EditText et01; TextView tv01; Button bt01; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setupview(); private void setupview() { 2. 建立 findview 方法裡的各個物件的實體, 參考程式碼如下 : private void setupview() { et01 = (EditText) findviewbyid(r.id.et01); tv01 = (TextView) findviewbyid(r.id.tv01); bt01 = (Button) findviewbyid(r.id.bt01); dbhelper01 = new mydbhelper(this, databasetable, null, 1); db01 = dbhelper01.getwritabledatabase(); 3. 執行程式看看, 應該能正常執行, 而且, 我們可以開啟命令提示字元視 窗, 驗證看看資料庫是否己經建立完成, 指令參考如下 : A. 執行 adb shell 進入 android 的模擬器的系統 B. 再執行 cd /data/data/ C. 輸入 ls -l 查看應該有一個和 package name 相同的目錄, 以我的 為例, 我會看到 com.example.t05sqlite 的目錄 Android 講義 v0.8 7 王振民

10 D. 執行 cd com.example.t05sqlite, 再輸入 ls -l 查看, 應該會產 生一個 databases 的資料夾, 而且, 裡頭會有個 t05note 的 檔案 E. 看到有 databases 的資料夾, 而且裡頭有個 t05note 的檔案, 就表示有呼叫 SQLite 建立資料庫, 也建立好了資料表 4. 在程式碼的空白處按 右鍵 / Source / Override/Implement Methods, 勾選 onstop(), 按 OK 5. 在 onstop 的方法裡, 我們要關閉資料庫, 釋放資源, 參考程式碼如下 : protected void onstop() { super.onstop(); db01.close(); 6. 建立 bt01click 事件, 參考如下 : private void setupview() { et01 = (EditText) findviewbyid(r.id.et01); tv01 = (TextView) findviewbyid(r.id.tv01); bt01 = (Button) findviewbyid(r.id.bt01); dbhelper01 = new mydbhelper(this, databasetable, null, 1); db01 = dbhelper01.getwritabledatabase(); bt01.setonclicklistener(bt01click); { Button.OnClickListener bt01click = new Button.OnClickListener() public void onclick(view v) { ; 7. 建立 bt01click 裡的 onclick 事件, 參考如下 : { Button.OnClickListener bt01click = new Button.OnClickListener() Android 講義 v0.8 8 王振民

11 public void onclick(view v) { long id; ContentValues cv01 = new ContentValues(); cv01.put("tnote", et01.gettext().tostring()); id = db01.insert(databasetable, null, cv01); Toast.makeText(getApplicationContext(), " 記錄新增完成 :" + id, Toast.LENGTH_SHORT).show(); ; 8. 執行程式, 輸入一些文字, 再按 儲存記事, 應該會顯示 記錄新增 完成 : x 的 toast 第 4 項 驗證看看 -sqlite3 指令 前項動作, 我們使用命令提示字元模式, 查看 databases 目錄與 t05note 檔 案, 從這個狀態可以再做更細的驗證動作, 請依以下動作操作 : 1. 輸入 sqlite3 t05note, 會進入 sqlite 的命令提示的環境 2. 畫面顯示, 可以輸入.help 取得一些協助, 試試看 3. 輸入.databases, 可以查看我們目前取用的資料庫 4. 輸入.tables, 可以得知我們目前有那些資料表 5. 一般的 sql 指令, 例如新增 刪除, 在這裡是可以通用的, 例如輸入 select * from t05note;, 就可以顯示所有記錄 6. 輸入.quit 可以離開 sqlite3 的命令提示環境 第 5 項 顯示資料表內容 1. 在 findview 方法裡, 呼叫 showtables 方法, 參考如下 : private void setupview() { et01 = (EditText) findviewbyid(r.id.et01); tv01 = (TextView) findviewbyid(r.id.tv01); bt01 = (Button) findviewbyid(r.id.bt01); dbhelper01 = new mydbhelper(this, databasetable, null, 1); db01 = dbhelper01.getwritabledatabase(); Android 講義 v0.8 9 王振民

12 bt01.setonclicklistener(bt01click); showtables(); private void showtables() { 2. 建立 showtables 方法裡的程式碼, 參考如下 : private void showtables() { String[] colnames = new String[] {"_id", "tnote"; String s01 = ""; Cursor c01 = db01.query(databasetable, colnames, null, null, null, null, null); for (int i=0; i<colnames.length; i++) { s01 = s01 + colnames[i] + "\t"; s01 = s01 + "\n"; c01.movetofirst(); for (int i=0; i<c01.getcount(); i++) { // s01 = s01 + c01.getstring( c01.getcolumnindex( colnames[0] ) ) + "\t"; s01 = s01 + c01.getstring(0) + "\t"; s01 = s01 + c01.getstring(1) + "\n"; c01.movetonext(); tv01.settext(s01.tostring()); 3. 執行程式看看, 應該可以列出所有的記錄 Android 講義 v 王振民

13 第 2 章 專案猜數字比大小 這個程式是個簡單的遊戲, 目要是由電腦亂數產生一個 1~99 之間的數字, 由我們來猜猜這個數字是多少, 我們猜數字時, 電腦會回應我們, 要再大一些, 或者是再小一些, 藉此提示我們猜到最後的那個數字 第 1 節 建立專案 為 a01 請依前面介紹的動作, 建立一個新的 Android 專案, 專案名稱就隨便設定 第 1 項 建立介面佈局檔 我們使用最基本的介面就可以, 建立以下幾個元件 : 1. 一個輸入文字框 (EditText), 提供使用者可以輸入數字 2. 一個按鈕 (Button), 在前一個 EditText 欄位輸入數字之後, 按下按鈕, 由 系統判斷數是否正確, 或者是顯示提示文字 3. 三個文字顯示框 (TextView), 輔助使用者測猜數字使用, 一個要顯示使 用者猜測數字區間的最小值, 另一個是顯示最大值, 另一個顯示是否猜 中數字 參考如下 : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" android:orientation="vertical" > <EditText android:id="@+id/et01" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputtype="number" android:text="50" android:textsize="20sp" /> <Button android:id="@+id/bt01" android:layout_width="match_parent" android:layout_height="wrap_content" Android 講義 v 王振民

14 android:text=" 比大小 " /> android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 最小值 " android:textsize="20sp" /> android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 最大值 " android:textsize="20sp" /> android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 繼續加油 " android:textsize="20sp" /> </LinearLayout> 第 2 項 主程式 參考如下 : package tw.a01; import android.app.activity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; public class A01GuessNumber extends Activity { EditText et01; Button bt01; TextView tv01; TextView tv02; TextView tv03; Integer pcnum; Android 講義 v 王振民

15 Integer a02=0; // 計算猜了幾次 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.mainguessnumber); setupviewcomponent(); private void setupviewcomponent() { et01 = (EditText) findviewbyid(r.id.et01); bt01 = (Button) findviewbyid(r.id.bt01); tv01 = (TextView) findviewbyid(r.id.tv01); tv02 = (TextView) findviewbyid(r.id.tv02); tv03 = (TextView) findviewbyid(r.id.tv03); pcnum=(int) (Math.random()*99+1); // tv03.settext(tv03.gettext() + pcnum.tostring()); tv01.settext("0"); tv02.settext("100"); bt01.setonclicklistener(bt01click); { Button.OnClickListener bt01click = new Button.OnClickListener() public void onclick(view v) { int a01; String s01=""; a02=a02+1; a01=integer.parseint(et01.gettext().tostring()); if (a01>pcnum) { s01=" 再小一些 "; tv02.settext(et01.gettext().tostring()); else if (a01<pcnum) { s01=" 再大一些 "; tv01.settext(et01.gettext().tostring()); else if (a01==pcnum) { Android 講義 v 王振民

16 次!!"; s01=" 恭禧你猜到了 ~~ 總共猜了 " + a02 + " 次! 再重玩一 a02=0; setupviewcomponent(); tv03.settext(s01); ; Android 講義 v 王振民

17 第 3 章 專案建立 WebView 程式 請先安裝好 Android 的開發環境, 建立一個專案, 接下來看看我們使用簡單 的 WebView 就能建立一個很實用的程式哦! 第 1 節 修改 AndroidManifest.xml 檔案 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="tw.idv.kingbig.browserintent" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="7" /> <uses-permission android:name="android.permission.internet" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".browserintentactivity" > <intent-filter > <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".golink01" android:label="@string/app_name_link01"> </activity> <activity android:name=".golink02" android:label="@string/app_name_link02"> </activity> </application> Android 講義 v 王振民

18 </manifest> 第 2 節 修改 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/golink01_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 文字 1" /> <Button android:id="@+id/golink02_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 文字 2" /> </LinearLayout> </LinearLayout> 第 3 節 建立 mainwebview.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <WebView Android 講義 v 王振民

19 android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" /> </LinearLayout> 第 1 項 建立 Activity 主程式 package tw.idv.kingbig.browserintent; import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; public class BrowserIntentActivity extends Activity implements android.view.view.onclicklistener { /** Called when the activity is first created. */ private Button golink01button; private Button golink02button; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); findviews(); private void findviews() { golink01button = (Button)findViewById(R.id.golink01_button); golink01button.setonclicklistener(this); golink02button = (Button)findViewById(R.id.golink02_button); golink02button.setonclicklistener(this); Android 講義 v 王振民

20 ; public void onclick(view v) { switch (v.getid()) { case R.id.golink01_button: Intent igolink01 = new Intent(this, golink01.class); startactivity(igolink01); break; case R.id.golink02_button: Intent igolink02 = new Intent(this, golink02.class); startactivity(igolink02); break; 第 2 項 建立 golink01 程式 package tw.idv.kingbig.browserintent; import android.app.activity; import android.os.bundle; import android.view.view; import android.webkit.webview; public class golink01 extends Activity implements android.view.view.onclicklistener { /** Called when the activity is first created. */ private WebView webview; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.mainwebview); findviews(); private void findviews() { Android 講義 v 王振民

21 webview=(webview) findviewbyid(r.id.web_view); openbrowser(); ; private void openbrowser() { String s01=new String(" 4"); webview.getsettings().setjavascriptenabled(true); webview.loadurl(s01); public void onclick(view v) { Android 講義 v 王振民

22 第 4 章 專案音樂播放程式 第 1 節 最陽春的音樂播放程式 第 1 項 建立空白的新專案 1. 請執行 File / New / Project, 選擇 Android / Android Application Project, 建立一個空白的專案 2. 開啟 layout 的介面佈局檔案, 建立一個按鈕, 將它命名為 bt01 ( android:id="@+id/bt01" ), 將它的顯示文字改為 播放音樂 (android:text=" 播放音樂 ") 3. 在 res 右鍵 / New / Folder, 建立一個 raw 資料夾 4. 請將一個 mp3 檔案複製到 /res/raw/ 底下, 請注意檔案名稱必須符合 res 的命名限制 第 2 項 加入 MediaPlayer 物件 1. 開啟主程式, 也許是 MainActivity.java, 一開始, 它的內容可能如下 : package com.example.t01music; import android.os.bundle;... 略 public class MainActivity extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); 2. 加入 MediaPlayer 物件的宣告, 請依程式的建議進行相關的 import 動 作, 如下 : Android 講義 v 王振民

23 package com.example.t01music; import android.media.mediaplayer;... 略 public class MainActivity extends Activity { MediaPlayer mp01 = null; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); 3. 宣告 mp3 的音樂物件, 如下 : package com.example.t01music; import android.media.mediaplayer;... 略 public class MainActivity extends Activity { MediaPlayer mp01 = null; int music01 = R.raw.fir02; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); 4. 在 oncreate() 輸入 setupview(); 的敘述, 並依建議動作處理, 產生一 個 setupview() 的方法... 略 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setupview(); Android 講義 v 王振民

24 private void setupview() { 5. 連結 mp3 檔案, 進行播放動作, 參考程式如下 :... 略 private void setupview() { mp01 = new MediaPlayer(); mp01 = MediaPlayer.create(this, music01); mp01.start(); 6. 執行程式吧 ~ 聽聽看, 是否有音樂播放出來? 第 3 項 改善一下, 離開程式時也能停止音樂的播放 剛剛我們所寫的程式, 如果還在播放的狀態, 我們就離開程式, 執行 android 的其它程式, 有沒有注意到, 音樂還在播放! 我們要改善這個狀況, 請依以下動作執行 : 1. 在程式碼的空白處按 右鍵 / Source / Override/Implement Methods 2. 在這裡找一找, 勾選 onpause(), 按 OK, 就會發現在程式碼裡頭, 多出以下的程式區塊 protected void onpause() { super.onpause(); 請加入以下二行程式 : protected void onpause() { super.onpause(); mp01.stop(); mp01.release(); Android 講義 v 王振民

25 1. 再重新執行程式, 在音樂尚未播放完畢前, 離開程式, 如果音樂也就停 止播放, 表示這個動作完成了! 第 4 項 按下播放按鈕才開始播放 目前的程式, 會在執行時就直接播放音樂, 我們要修改一下, 在按下 播放 音樂 時, 才開始播放, 請依以下動作操作 : 1. 先宣告 Button 類別的 bt01 物件, 再由 R 取出相對應的資源, 指定給 bt01 物件, 再宣告 bt01 的傾聽程式, 參考如下 :... 略 public class MainActivity extends Activity { MediaPlayer mp01 = null; int music01 = R.raw.fir02; Button bt01; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); private void setupview() { bt01 = (Button) findviewbyid(r.id.bt01); bt01.setonclicklistener(bt01click); mp01 = MediaPlayer.create(this, music01); mp01.start(); protected void onpause() { super.onpause(); mp01.stop(); mp01.release(); Android 講義 v 王振民

26 2. 在我們使用 setonclicklistener() 宣告傾聽程式後, 會顯示錯誤訊息, 我 們必須手動輸入程式, 建立 bt01click, 請特別注意的是, 請將 bt01click 當做是一個物件, 它是經由 Button.OnClickListener 的宣告, 所產生的一 個物件, 因此, 最後的大括弧結束時, 必須再加一個 ; 結束 程式 碼參考如下 :... 略 public class MainActivity extends Activity { MediaPlayer mp01 = null; int music01 = R.raw.fir02; Button bt01;... 略 private void setupview() { bt01 = (Button) findviewbyid(r.id.bt01); bt01.setonclicklistener(bt01click); mp01 = MediaPlayer.create(this, music01); mp01.start(); { Button.OnClickListener bt01click = new Button.OnClickListener() ;... 略 3. 系統會提示我們, bt01click 的物件還需要 Add unimplemented { methods, 請依程式的建議處理, 會在 bt01click 物件裡, 再宣告 onclick() 的事件, 這個區塊的程式碼如下 : Button.OnClickListener bt01click = new Button.OnClickListener() public void onclick(view v) { ; Android 講義 v 王振民

27 4. 將 mp01 指定物件與 mp01 播放的二行程式, 移到 bt01click 的 onclick() 方法裡, 同時, 再稍微修改一下程式, 主要是將 MediaPlayer.create(this, music01) 改為 MediaPlayer.create(getApplicationContext(), music01), 將 this 改為 getapplicationcontext() 的原因, 是原本的 MediaPlayer.create() 方法, 是在主要的 Activity 裡執行, 因此只要使用 this 關鍵字就可以取得 這個 Activity 的物件 當我們將 MediaPlayer.create() 方法移到 bt01click 的物件時, this 所參考的物件 可能會不正確, 因此, 我們必須將它改為 getapplicationcontext() 方 法, 透過呼叫這個方法來取得我們 主要的 Activity 是那一個物件, 這 樣一來,mp01 還是可以正確的取得播放的音樂資源, 進行後續播放的 動作 程式碼參考如下 :... 略 public class MainActivity extends Activity {... 略 private void setupview() { bt01 = (Button) findviewbyid(r.id.bt01); bt01.setonclicklistener(bt01click);... 略 Button.OnClickListener bt01click = new Button.OnClickListener() { public void onclick(view v) { mp01 = MediaPlayer.create( getapplicationcontext(), music01); mp01.start(); ; 5. 執行程式試試看, 程式執行後, 必須等我們按 播放音樂 的按鈕後, 才會有音樂囉! 練習題 1: 目前有 播放音樂 的按鈕, 請自行建立 停止播放 的按鈕, 而且, 在按下 停止播放 按鈕時, 要能停止音樂的播放動作 練習題 2: 試試看, 建立一個 暫停 / 播放 的按鈕, 按一下可以暫停音樂的播放, 再按一下, 可以繼續音樂的播放 Android 講義 v 王振民

28 第 5 章 專案 2048 遊戲 2048 這套遊戲不論在網頁版 或者是 android 版, 都非常盛行 因此, 我們自己來寫一個, 當做專案開發的練習吧! 首先, 請先參考 建立第一個 android 程式 的章節內容, 先建立新的 android 專案, 在這個章節裡, 我以 math2048 做為專案名稱, 以 tw.idv.kingbig.android.math2048 做為 package name 第 1 節 遊戲介紹 第 1 項 玩法 Android 講義 v 王振民

29 第 2 項 程式運作概念 假設目前的狀況, 如果方向是向左滑 先將所有數字靠邊 數字相同相加 以下說明詳細的運作方式, 我們以 step by step 的方式解說 假設目前的狀況, 第一列為 01, 02, 03, 04, 第二列為 05, 06, 07, 08, 其餘依 序類推 承前面所述, 我們以底下這個例子來說明 Android 講義 v 王振民

30 由上圖來看, 第 01 格是 0, 將 格向左移 從上圖來看, 第 02 格是 0, 將 格向左移 從上圖來看, 第 03 格是 0, 將 04 格向左移, 第一列第一次判斷完成, 其 餘動作暫時跳過, 第四列再說明 第二列的流程如前所述, 結果如下 第三列的流程亦同, 結果如下 從上圖來看, 第四列, 第 13 格是 0, 將 向左移 Android 講義 v 王振民

31 從上圖來看, 第四列, 第 14 格是 0, 將 向左移 從上圖來看, 第四列, 第 15 格是 0, 將 16 向左移 從上圖來看, 最前方還有個 0, 並未完全消除, 因此, 數字並未完全移到 最邊緣 因此, 判斷是 0, 同時移動資料的動作不能只做一次, 至少要做二次, 最 後結果如下 第 2 節 介面佈局檔 第 1 項 說明 程式初期, 我們先用 TextView 元件顯示數字, 而且, 我以 LinearLayout 做為介面佈局的方式, 以一個垂直方向的 LinearLayout 為主, 在其中加入數個水平方向的 LinearLayout, 做為子容器, 再將 TextView 放在子容器裡 等整個程式趨近完整時, 我們再回來調整這部份, 加入更多的視覺效果 同時, 先建立四個 Button, 分別做為上 下 左 右的四個方向, 當程式趨近完整後, 我們再加入手勢, 移除 Button Android 講義 v 王振民

32 第 2 項 原始碼 以下為介面佈局檔的原始碼 其中, 每一個 TextView 的寬度和高度, 我都是先依裝置的螢幕解析度來設定的, 不見得適用於你的螢幕, 因此請依你的設備自行調整 <LinearLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="tw.idv.kingbig.android.math2048.mainactivity$plac eholderfragment" > android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > android:id="@+id/tv01" android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:id="@+id/tv02" android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> Android 講義 v 王振民

33 android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" Android 講義 v 王振民

34 android:gravity="center" android:text="textview" android:textsize="20dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > Android 講義 v 王振民

35 android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> android:layout_width="80dp" android:layout_height="80dp" android:gravity="center" android:text="textview" android:textsize="20dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <Button android:layout_width="80dp" android:layout_height="40dp" android:gravity="center" android:text="up" android:textsize="12dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" Android 講義 v 王振民

36 android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <Button android:layout_width="80dp" android:layout_height="40dp" android:gravity="center" android:text="left" android:textsize="12dp" /> <Button android:layout_width="80dp" android:layout_height="40dp" android:gravity="center" android:text="down" android:textsize="12dp" /> <Button android:layout_width="80dp" android:layout_height="40dp" android:gravity="center" android:text="right" android:textsize="12dp" /> </LinearLayout> </LinearLayout> 第 3 節 主程式開發 前項的介面佈局檔完成後, 就可以點選 MainActivity.java 檔案, 執行程式, 看看顯示出來的視窗是否正確 第 1 項 主程式 - 基本設定 首先, 先宣告基本的元件 package tw.idv.kingbig.android.math2048; 略 Android 講義 v 王振民

37 public class MainActivity extends Activity { int num = 16; TextView tv01, tv02, tv03, tv04, tv05, tv06, tv07, tv08, tv09, tv10, tv11, tv12, tv13, tv14, tv15, tv16; Button btup, btleft, btdown, btright; int[] pcnum = new int[num + 1]; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); if (savedinstancestate == null) { getfragmentmanager().begintransaction().add(r.id.container, new PlaceholderFragment()).commit(); protected void onresume() { super.onresume(); setupview(); private void setupview() { public boolean oncreateoptionsmenu(menu menu) { 略 public boolean onoptionsitemselected(menuitem item) { 略 /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { Android 講義 v 王振民

38 略 將宣告的元作, 和 Layout 檔案裡的元件連結在一起 private void setupview() { tv01 = (TextView) findviewbyid(r.id.tv01); tv02 = (TextView) findviewbyid(r.id.tv02); tv03 = (TextView) findviewbyid(r.id.tv03); tv04 = (TextView) findviewbyid(r.id.tv04); tv05 = (TextView) findviewbyid(r.id.tv05); tv06 = (TextView) findviewbyid(r.id.tv06); tv07 = (TextView) findviewbyid(r.id.tv07); tv08 = (TextView) findviewbyid(r.id.tv08); tv09 = (TextView) findviewbyid(r.id.tv09); tv10 = (TextView) findviewbyid(r.id.tv10); tv11 = (TextView) findviewbyid(r.id.tv11); tv12 = (TextView) findviewbyid(r.id.tv12); tv13 = (TextView) findviewbyid(r.id.tv13); tv14 = (TextView) findviewbyid(r.id.tv14); tv15 = (TextView) findviewbyid(r.id.tv15); tv16 = (TextView) findviewbyid(r.id.tv16); btup = (Button) findviewbyid(r.id.btup); btdown = (Button) findviewbyid(r.id.btdown); btleft = (Button) findviewbyid(r.id.btleft); btright = (Button) findviewbyid(r.id.btright); init(); 第 2 項 主程式 - 產生亂數 各個元件的初始化, 同時產生亂數 private void init() { Android 講義 v 王振民

39 for (int a01 = 0; a01 <= num; a01++) { pcnum[a01] = 0; initrandom(); shownumber(); private void initrandom() { int a01 = ((int) (Math.random() * 2 + 1)) * 2; int f01 = 0; // flag int c01 = 0; // count int a02 = 0; // position while (f01 == 0) { c01++; a02 = (int) (Math.random() * num + 1); if (pcnum[a02] == 0) { f01 = 1; pcnum[a02] = a01; // 這裡暫時先用偷懶的方式處理 if (c01 > 100) { Toast.makeText(this, "Game Over", Toast.LENGTH_LONG).show(); break; Log.d("a2048", "a01: " + a01 + ", a02: " + a02); private void shownumber() { tv01.settext(integer.tostring(pcnum[1])); tv02.settext(integer.tostring(pcnum[2])); tv03.settext(integer.tostring(pcnum[3])); tv04.settext(integer.tostring(pcnum[4])); tv05.settext(integer.tostring(pcnum[5])); tv06.settext(integer.tostring(pcnum[6])); tv07.settext(integer.tostring(pcnum[7])); Android 講義 v 王振民

40 tv08.settext(integer.tostring(pcnum[8])); tv09.settext(integer.tostring(pcnum[9])); tv10.settext(integer.tostring(pcnum[10])); tv11.settext(integer.tostring(pcnum[11])); tv12.settext(integer.tostring(pcnum[12])); tv13.settext(integer.tostring(pcnum[13])); tv14.settext(integer.tostring(pcnum[14])); tv15.settext(integer.tostring(pcnum[15])); tv16.settext(integer.tostring(pcnum[16])); 第 3 項 主程式 - 數字靠邊 數字加總 宣告按鈕的傾聽程式 private void setupview() { 略 btup = (Button) findviewbyid(r.id.btup); btdown = (Button) findviewbyid(r.id.btdown); btleft = (Button) findviewbyid(r.id.btleft); btright = (Button) findviewbyid(r.id.btright); init(); btup.setonclicklistener(btupclick); btdown.setonclicklistener(btdownclick); btleft.setonclicklistener(btleftclick); btright.setonclicklistener(btrightclick); 建立各個按鈕的觸發事件 Button.OnClickListener btupclick = new Button.OnClickListener() { Android 講義 v 王振民

41 public void onclick(view v) { int n01 = 0; // 目前要比對的位置 for (int i01 = 1; i01 <= 4; i01++) { n01 = 0; for (int x = 1; x <= 4; x++) { for (int i02 = 0; i02 < 3; i02++) { n01 = i01 + i02 * 4; if (pcnum[n01] == 0) { for (int i03 = n01; i03 < i * 4; i03 = i03 + 4) { pcnum[i03] = pcnum[i03 + 4]; pcnum[i * 4] = 0; for (int i02 = 0; i02 < 3; i02++) { n01 = i01 + i02 * 4; if (pcnum[n01] == pcnum[n01 + 4]) { pcnum[n01] = pcnum[n01] * 2; for (int i03 = n01 + 4; i03 < i * 4; i03 = i03 + 4) { pcnum[i03] = pcnum[i03 + 4]; pcnum[i * 4] = 0; initrandom(); shownumber(); ; Button.OnClickListener btdownclick = new Button.OnClickListener() { public void onclick(view v) { Android 講義 v 王振民

42 int n01 = 0; // 目前要比對的位置 for (int i01 = 1; i01 <= 4; i01++) { - 4) { n01 = 0; for (int x = 1; x <= 4; x++) { for (int i02 = 3; i02 > 0; i02--) { n01 = i01 + i02 * 4; if (pcnum[n01] == 0) { for (int i03 = n01; i03 > i01; i03 = i03 pcnum[i03] = pcnum[i03-4]; pcnum[i01] = 0; - 4) { for (int i02 = 3; i02 > 0; i02--) { n01 = i01 + i02 * 4; if (pcnum[n01] == pcnum[n01-4]) { pcnum[n01] = pcnum[n01] * 2; for (int i03 = n01-4; i03 > i01; i03 = i03 pcnum[i03] = pcnum[i03-4]; pcnum[i01] = 0; initrandom(); shownumber(); ; Button.OnClickListener btleftclick = new Button.OnClickListener() { public void onclick(view v) { int n01 = 0; // 目前要比對的位置 for (int i01 = 0; i01 < 4; i01++) { Android 講義 v 王振民

43 n01 = 0; for (int x = 1; x <= 4; x++) { for (int i02 = 1; i02 < 4; i02++) { n01 = i01 * 4 + i02; if (pcnum[n01] == 0) { for (int i03 = i01 * 4 + i02; i03 < i01 * 4 + 4; i03++) { pcnum[i03] = pcnum[i03 + 1]; pcnum[i01 * 4 + 4] = 0; for (int i02 = 1; i02 < 4; i02++) { n01 = i01 * 4 + i02; if (pcnum[n01] == pcnum[n01 + 1]) { pcnum[n01] = pcnum[n01] * 2; for (int i03 = i01 * 4 + i02 + 1; i03 < i01 * 4 + 4; i03++) { pcnum[i03] = pcnum[i03 + 1]; pcnum[i01 * 4 + 4] = 0; initrandom(); shownumber(); ; Button.OnClickListener btrightclick = new Button.OnClickListener() { public void onclick(view v) { int n01 = 0; // 目前要比對的位置 for (int i01 = 0; i01 < 4; i01++) { n01 = 0; for (int x = 1; x <= 4; x++) { for (int i02 = 4; i02 > 1; i02--) { Android 講義 v 王振民

44 * 4 + 1; i03--) { n01 = i01 * 4 + i02; if (pcnum[n01] == 0) { for (int i03 = i01 * 4 + i02; i03 > i01 pcnum[i03] = pcnum[i03-1]; pcnum[i01 * 4 + 1] = 0; for (int i02 = 4; i02 > 1; i02--) { n01 = i01 * 4 + i02; if (pcnum[n01] == pcnum[n01-1]) { pcnum[n01] = pcnum[n01] * 2; for (int i03 = i01 * 4 + i02-1; i03 > i01 * 4 + 1; i03--) { pcnum[i03] = pcnum[i03-1]; pcnum[i01 * 4 + 1] = 0; initrandom(); shownumber(); ; 執行程式, 應該可以使用四個按鈕進行遊戲了 第 4 節 加入手勢 上述動作完成後, 等會要進行比較大的修改, 因此, 請先將整個專案備份一 下, 留個保障 Android 講義 v 王振民

45 第 1 項 移除 Button 物件 請將介面佈局檔的四個 Button 元件移除, 包含這四個 Button 元件的容器也 可以一併移除 同時, 將 MainActivity.java 檔案內容裡, 有關 Button 的內容將它們註解或者 直接移除 : private void setupview() { 略 // btup = (Button) findviewbyid(r.id.btup); // btdown = (Button) findviewbyid(r.id.btdown); // btleft = (Button) findviewbyid(r.id.btleft); // btright = (Button) findviewbyid(r.id.btright); init(); // btup.setonclicklistener(btupclick); // btdown.setonclicklistener(btdownclick); // btleft.setonclicklistener(btleftclick); // btright.setonclicklistener(btrightclick); 將原本的 btupclick btdownclick btleftclick btrightclick 程式, 改為以下 的 method 方式 private void swiperight() { int n01 = 0; // 目前要比對的位置 略 initrandom(); shownumber(); private void swipeleft() { int n01 = 0; // 目前要比對的位置 略 Android 講義 v 王振民

46 initrandom(); shownumber(); private void swipedown() { int n01 = 0; // 目前要比對的位置 略 initrandom(); shownumber(); private void swipeup() { int n01 = 0; // 目前要比對的位置 略 initrandom(); shownumber(); 第 2 項 加入手勢 public class MainActivity extends Activity { int num = 16; TextView tv01, tv02, tv03, tv04, tv05, tv06, tv07, tv08, tv09, tv10, tv11, tv12, tv13, tv14, tv15, tv16; Button btup, btleft, btdown, btright; int[] pcnum = new int[num + 1]; private GestureDetectorCompat mdetector; public final static int SWIPE_UP = 1; public final static int SWIPE_DOWN = 2; public final static int SWIPE_LEFT = 3; public final static int SWIPE_RIGHT = 4; public int SWIPE_DIRECTION = 0; 略 private void setupview() { Android 講義 v 王振民

47 init(); // btup.setonclicklistener(btupclick); // btdown.setonclicklistener(btdownclick); // btleft.setonclicklistener(btleftclick); // btright.setonclicklistener(btrightclick); mdetector = new GestureDetectorCompat(this, new MyGestureListener()); 略 private void swiperight() { 略 private void swipeleft() { 略 private void swipedown() { 略 private void swipeup() { 略 public boolean ontouchevent(motionevent event) { SWIPE_DIRECTION=0; this.mdetector.ontouchevent(event); Log.d("a2048", "ontouchevent: " + SWIPE_DIRECTION); switch (SWIPE_DIRECTION) { case SWIPE_UP: swipeup(); break; case SWIPE_DOWN: swipedown(); break; case SWIPE_LEFT: Android 講義 v 王振民

48 swipeleft(); break; case SWIPE_RIGHT: swiperight(); break; return super.ontouchevent(event); /** * */ class MyGestureListener extends GestureDetector.SimpleOnGestureListener { private static final String DEBUG_TAG = "a2048"; private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200; public boolean ondown(motionevent event) { // Log.d(DEBUG_TAG, "ondown: " + event.tostring()); return true; event2, public boolean onfling(motionevent event1, MotionEvent float velocityx, float velocityy) { // Log.d(DEBUG_TAG, "onfling: " + event1.tostring() + // event2.tostring()); // Log.d("a2048", "onfling"); boolean isswipe = false; SWIPE_DIRECTION = 0; try { // right to left swipe if (event1.getx() - event2.getx() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isswipe = true; Android 講義 v 王振民

49 SWIPE_DIRECTION = 3; // left to right swipe else if (event2.getx() - event1.getx() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { isswipe = true; SWIPE_DIRECTION = 4; // up to down swipe else if (event2.gety() - event1.gety() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { isswipe = true; SWIPE_DIRECTION = 2; // down to up swipe else if (event1.gety() - event2.gety() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { isswipe = true; SWIPE_DIRECTION = 1; catch (Exception e) { // Log.d("a2048", "xy: (" + event1.getx() + ", " + event1.gety() + // ")-(" + event2.getx() + ", " + event2.gety() + ")" ); return isswipe; 完成! Android 講義 v 王振民

50 第 6 章 專案 GPS 服務 這個程式範例, 在 Android 2.1 的環境就可以正常執行, 不過, 這個專案裡我們先用簡單的方式來完成 GPS 的服務, 比較進階而完整的方式, 容後再做 第 1 項 設定 manifest 的使用授權項目 請開啟 AndroidManifest.xml 檔案, 請加入以下四行 users-permission 這四行 uses-permission 分別代表允許取得 GPS 的精細座標位置 允許使用者所輸入的模擬位置 允許使用 3g 或 wifi 的方式取得的概略位置 允許存取網際網路 前三項的 uses-permission 是抓取座標位置要用的, 而第四項則是要由網路傳回 Google Maps 時, 會需要使用網路連線 傳回資料 <uses-sdk android:minsdkversion="7" android:targetsdkversion="7" /> <uses-permission android:name="android.permission.access_fine_location" /> <uses-permission android:name="android.permission.access_mock_location" /> <uses-permission android:name="android.permission.access_coarse_location" /> <uses-permission android:name="android.permission.internet" /> 這個檔案還有其他的設定要做, 等稍後我們再回來這裡設定, 目前暫時先設 定這四項使用授權即可 記得存檔 Android 講義 v 王振民

51 第 2 項 建立介面佈局檔 1. 請先開啟介面佈局檔, 拖拉元件如下圖 : 2. 直接瀏覽 xml 檔案的話, 參考內容如下 : <RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:id="@+id/txtlabel01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:text=" 緯度 :" tools:context=".mainactivity" /> android:id="@+id/txttext01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" Android 講義 v 王振民

52 android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 經度 :" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 精確度 :" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 高度 :" /> android:layout_width="wrap_content" android:layout_height="wrap_content" Android 講義 v 王振民

53 android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 時間 :" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 速度 :" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 方位 :" /> Android 講義 v 王振民

54 android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text=" 歷史記錄 " /> <WebView android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignparentleft="true" android:layout_alignparentright="true" /> </RelativeLayout> 第 3 項 建立連結資料庫的 dbhelper public class mydbhelper extends SQLiteOpenHelper { public mydbhelper(context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub public void oncreate(sqlitedatabase arg0) { // 這個是資料表的結構 // 其中的 gtdate datetime 有問題, 請暫時忽略 arg0.execsql( "create table gpstracer (" + "_id integer primary key autoincrement, " + Android 講義 v 王振民

55 ")" ); "gtdate datetime, " + "gtlatitude long, " + "gtlongitude long, " + "gtaccuracy long, " + "gtaltitude long, " + "gttime long, " + "gtspeed long, " + "gtbearing long" + { public void onupgrade(sqlitedatabase arg0, int arg1, int arg2) arg0.execsql("drop table if exists gpstracer"); oncreate(arg0); 第 4 項 建立主程式 public class MainActivity extends Activity { TextView txtlabel01; TextView txtlabel02; TextView txtlabel03; TextView txtlabel04; TextView txtlabel05; TextView txtlabel06; TextView txtlabel07; TextView txttext01; TextView txttext02; TextView txttext03; TextView txttext04; TextView txttext05; TextView txttext06; TextView txttext07; Button btnhistorylist; WebView wv01; // 宣告資料庫相關的物件 Android 講義 v 王振民

56 mydbhelper dbhelper01; // 使用繼承自 SQLiteOpenHelper 類別所產生的物件, 協助我們建立資料庫連結的動作 SQLiteDatabase gpstracerdb; // 連結資料庫進行查詢 新增資料的動作 String databasetable = "gpstracer"; // 宣告資料表的名稱, 這行可以不用 LocationManager lm01; // 宣告一個 LocationManager 類別的 lm01 物件 // 宣告一個 LocationListener 類別的 lm01listener 物件, // 在 new LocationListener() 產生物件時, 會同時建立其中的幾個 method public LocationListener lm01listener = new LocationListener() { //gps 的狀態改變時, 會呼叫這個 method public void onstatuschanged(string provider, int status, Bundle extras) { switch (status) { case LocationProvider.AVAILABLE: Log.v("status", "AVAILABLE"); break; case LocationProvider.OUT_OF_SERVICE: Log.v("status", "OUT_OF_SERVICE"); break; case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.v("status", "TEMPORARILY_UNAVAILABLE"); break; public void onproviderenabled(string provider) { public void onproviderdisabled(string provider) { // 當座標改變時, 會呼叫這個 method public void onlocationchanged(location location) { Android 講義 v 王振民

57 txttext01.settext(string.valueof(location.getlatitude())); txttext02.settext(string.valueof(location.getlongitude())); txttext03.settext(string.valueof(location.getaccuracy())); txttext04.settext(string.valueof(location.getaltitude())); txttext05.settext(string.valueof(location.gettime())); txttext06.settext(string.valueof(location.getspeed())); txttext07.settext(string.valueof(location.getbearing())); wv01.loadurl(" r=" + Double.toString(location.getLatitude()) +"," + Double.toString(location.getLongitude()) + "&zoom=16&size="+ "360x400&sensor=false&markers=color:blue%7Clabel:S%7C"+ Double.toString(location.getLatitude())+ "," + Double.toString(location.getLongitude())); // 以下動作是要將資料存到資料庫 long id; // 使用 ContentValues 以陣列 key-value 的方式儲存, // 其中的 key 就是欄位名稱,value 就是儲存的值 ( 要轉換為字串 ) ContentValues cv01 = new ContentValues(); cv01.put("gtdate", "current_timestamp"); cv01.put("gtlatitude", String.valueOf(location.getLatitude())); cv01.put("gtlongitude", String.valueOf(location.getLongitude())); cv01.put("gtaccuracy", String.valueOf(location.getAccuracy())); cv01.put("gtaltitude", String.valueOf(location.getAltitude())); cv01.put("gttime", String.valueOf(location.getTime())); cv01.put("gtspeed", String.valueOf(location.getSpeed())); cv01.put("gtbearing", String.valueOf(location.getBearing())); // 進行 insert 到資料表的動作 id=gpstracerdb.insert(databasetable, null, cv01); Android 講義 v 王振民

58 Toast.makeText(getApplicationContext(), " 記錄新增完成 :" + id, Toast.LENGTH_SHORT).show(); ; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setupview(); // 自己建立的程式寫在這裡 private void setupview() { txtlabel01=(textview) findviewbyid(r.id.txtlabel01); txtlabel02=(textview) findviewbyid(r.id.txtlabel02); txtlabel03=(textview) findviewbyid(r.id.txtlabel03); txtlabel04=(textview) findviewbyid(r.id.txtlabel04); txtlabel05=(textview) findviewbyid(r.id.txtlabel05); txtlabel06=(textview) findviewbyid(r.id.txtlabel06); txtlabel07=(textview) findviewbyid(r.id.txtlabel07); txttext01=(textview) findviewbyid(r.id.txttext01); txttext02=(textview) findviewbyid(r.id.txttext02); txttext03=(textview) findviewbyid(r.id.txttext03); txttext04=(textview) findviewbyid(r.id.txttext04); txttext05=(textview) findviewbyid(r.id.txttext05); txttext06=(textview) findviewbyid(r.id.txttext06); txttext07=(textview) findviewbyid(r.id.txttext07); btnhistorylist=(button) findviewbyid(r.id.btnhistorylist); wv01=(webview) findviewbyid(r.id.webview1); // 透過 getsystemservice 去呼叫 LOCATION_SERVICE, 建立一個 LocationManager 的服務 //LOCATION_SERVICE 的完整服務是 android.content.context.location_service // 由 LOCATION_SERVICE 服務就可以取得系統提供的座標 高度 方位等各項服務 Android 講義 v 王振民

59 lm01=(locationmanager) getsystemservice(location_service); // 以下動作在設定 LocationListener(lm01Listener 物件 ) 的最小變動時機, // 每 2 秒 (2000) 更新一次 // 每 5 公尺更新一次 // lm01.requestlocationupdates(locationmanager.network_provider, 2000, 5, lm01listener); lm01.requestlocationupdates(locationmanager.gps_provider, 2000, 5, lm01listener); // 連結資料庫的動作 dbhelper01 = new mydbhelper(this, databasetable, null, 1); gpstracerdb = dbhelper01.getwritabledatabase(); // 註冊一個按下歷史記錄的按鈕傾聽程式 btnhistorylist.setonclicklistener(btnhistorylistclick); // 程式如果關閉時, 要釋放 SQLiteDatabase 資源 protected void onstop() { super.onstop(); gpstracerdb.close(); // 程式如果暫停, 也要停止更新的動作 protected void onpause() { if (lm01!= null) { lm01.removeupdates(lm01listener); super.onpause(); // 程式如果由停止或暫停的狀態, 恢復為執行的狀態, // 必須要重新記錄更新的動作 protected void onresume() { Android 講義 v 王振民

60 if (lm01!= null) { lm01.requestlocationupdates(locationmanager.gps_provider, 2000, 5, lm01listener); lm01.requestlocationupdates(locationmanager.network_provider, 2000, 5, lm01listener); super.onresume(); public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.activity_main, menu); return true; // 按下歷史記錄的按鈕時, 要呼叫另一個程式出來 Button.OnClickListener btnhistorylistclick = new Button.OnClickListener() { public void onclick(view arg0) { Intent i01 = new Intent(getApplication(), gpshistorylist.class); startactivity(i01); ; 第 5 項 建立第二個程式 - 佈景主題 <ScrollView xmlns:android=" Android 講義 v 王振民

61 xmlns:tools=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:text=" 返回 " /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:text="" /> </RelativeLayout> </ScrollView> 第 6 項 建立第二個程式 - 主程式 public class gpshistorylist extends Activity { TextView txtlist01; Button btnreturn; // 宣告資料庫相關的物件 mydbhelper dbhelper01; // 使用繼承自 SQLiteOpenHelper 類別所產生的物件, 協助我們建立資料庫連結的動作 SQLiteDatabase gpstracerdb; // 連結資料庫進行查詢 新增資料的動作 String databasetable = "gpstracer"; // 宣告資料表的名稱, 這行可以不用 public void oncreate(bundle savedinstancestate) { Android 講義 v 王振民

62 super.oncreate(savedinstancestate); // 呼叫版面配置, 這裡只有一個返回鍵以及文字框 ( 顯示歷史資料使用的 ) setcontentview(r.layout.activity_gpshistorylist); setupview(); // 自己建立的程式寫在這裡 private void setupview() { txtlist01=(textview) findviewbyid(r.id.txtlist01); btnreturn=(button) findviewbyid(r.id.btnreturn); // 返回鍵, 要關閉自身的 activity btnreturn.setonclicklistener(btnreturnclick); // 連結資料庫 dbhelper01 = new mydbhelper(this, databasetable, null, 1); gpstracerdb = dbhelper01.getwritabledatabase(); String[] colnames = new String[] {"_id", "gtdate", "gtlatitude", "gtlongitude", "gtaccuracy", "gtaltitude", "gttime", "gtspeed", "gtbearing"; String s01=""; Cursor c01 = gpstracerdb.query(databasetable, colnames, null, null, null, null, "_id desc"); // 將內容以一個簡單的格式輸出 c01.movetofirst(); for (int i=0; i<c01.getcount(); i++) { s01 = s01 + "No." + c01.getstring(0) + ",\t\t\t\t"; // 顯示自動增加的編號 s01 = s01 + "Time:" + c01.getstring(6) + "\n"; // 顯示第 6 欄的日期, 換下一行 s01 = s01 + "Location:" + c01.getstring(2) + ",\t"; // 顯示經度 s01 = s01 + c01.getstring(3) + "\n"; // 顯示緯度, 換下一行 s01 = s01 + "Accuracy:" + c01.getstring(4) + ",\t"; // 顯示精確度 s01 = s01 + "Altitude:" + c01.getstring(5) + "\n"; // 顯示高度, 換下一行 s01 = s01 + "Speed:" + c01.getstring(7) + ",\t\t\t"; // 顯示速度 Android 講義 v 王振民

Java講義

Java講義 Android 講義 2012.11.11 目錄 第一章 android 的第一次接觸...3 第一節 Windows 7 安裝 Android SDK 開發環境...3 第一項安裝 jdk...3 第二項設定 jdk 的環境變數...4 第三項安裝 Android SDK...8 第四項安裝 eclipse...11 第五項在 eclipse 安裝 ADT plugin...13 第二節建立 AVD

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

Java講義

Java講義 Android 講義 王振民 2012.07.10 目錄 第一章音樂播放程式...3 第一節最陽春的音樂播放程式...3 第一項建立空白的新專案...3 第二項加入 MediaPlayer 物件...3 第二節改善這個程式...5 第一項瞭解 Activity 的生命週期...5 第二項離開程式時也能停止音樂的播放...8 第三項按下播放按鈕才開始播放...8 第二章 google 地圖...12

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

Database_001

Database_001 作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

Java講義

Java講義 Android 講義 2012.07.10 目錄 第一章安裝環境...2 第一節 jdk...2 第二節 eclipse...11 第三節安裝 android sdk...18 第四節建立 AVD 模擬環境...33 第五節 eclipse 環境設定...38 第六節建立第一個 android 專案...42 第七節擷取 android 裝置的畫面...51 第二章程式範例...54 第一節猜數字比大小...54

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

0511-Android程式之GPS應用_專題週記4

0511-Android程式之GPS應用_專題週記4 逢甲大學通訊工程學系專題研究 Android 程式之 GPS 應用 專題週記 0511 學生姓名 陳彥儒 D0035131 廖元譽 D0077791 指導老師 楊豐瑞老師繳交日期 2014.05.11 1 匯入 GoogleMap 1.1 取得授權步驟 目前進度 取得 Google 授權鑰匙 實作程式尚未成功 1.1.1 建立個人的 keystore 1.1.2 由個人的 keystore 查詢 SHA1

More information

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 : EditText 实现城市搜索 1801210778 邹宇航 摘要 : 使用 EditText 实现搜索城市的功能, 以此为依据更新 ListView 1. 效果图 : 2. 主要步骤 (1) 在 select-city.xml 布局文件中中添加 EditText 控件用作搜索框, 然后添加 ListView 控件用来显示城市名字内容 代码如下 : 预览图 : (2) 在 SelectCity.java

More information

實作SQLiteOpenHelper類別

實作SQLiteOpenHelper類別 SQLiteOpenHelper 類別存取 SQLite 建國科技大學資管系 饒瑞佶 2013/5 V1 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表

More information

ShareText

ShareText 作者 : 林致宇 日期 :2012/1/23 問題 : 如何分享分享文字資訊給其它的應用程式? 解答 : 有時候我們可能會希望 我們的應用程式的資訊 能夠讓使用者分享出去, 讓使用者能夠將此資訊傳送簡訊給其好友或寄電子郵件的方式寄給其好友, 這份文件將示範如何寫出這樣的應用程式 本文件將產出兩個 App, 第一個 App 是 分享資料的來源, 名為 CopyPaste_Source, 功能非常簡單,

More information

RecyclerView and CardVew

RecyclerView and CardVew RecyclerView and CardView 建國科技大學資管系饒瑞佶 2017/10 V1 CardView CardView A CardView is a ViewGroup. Like any other ViewGroup, it can be added to youractivity or Fragment using a layout XML file. To create an

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Microsoft Word - 02.目錄.doc

Microsoft Word - 02.目錄.doc 目錄 -1- 目錄 序 準備篇 一 使用說明... 0-2 二 標示說明... 0-6 三 注意事項... 0-7 第一類 Android 基礎知識 -UI 設計及語法應用 101. 整存整付計算機... 1-2 102. 電費計算機... 1-8 103. 點餐系統... 1-18 104. 計算 BMI 值... 1-23 105. MENU 功能選單... 1-36 106. 畫廊展示...

More information

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android= 第 6 章广播接收者 应用案例 案例 6-1 CallRecord( 通话记录 ) 一 案例描述 1 考核知识点 030006001: 广播接收者简介 030006002: 广播接收者的创建 2 练习目标 广播的静态注册和使用 使用广播处理处理事件 3 需求分析手机最重要的功能就是通话功能, 同样储存通话记录也是必不可少的 该案例使用广 播接收者自己实现通话记录的功能 包括呼出电话 已接来电 未接来电以及通话产生的

More information

Android + NFC

Android + NFC Android + NFC 建國科技大學資管系饒瑞佶 2017/3 v1 讀取 Tag UUID Android 2.3.3 (API Level 10) 才有支援完整的 NFC 功能 只要 NFC 相容都讀的到 (NFC 或 Mifare) 建立新專案修改 AndroidManifest.xml 加入 , 如果有 NFC Tag 進入感測範圍, 本 App 也會變成可處理的

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

Android 开发教程

Android 开发教程 封面 1 文件存取编程基础 文件 文件可以用来存储比使用引用更大数量的数据 Android 提供方法来读 写文件 只有本地文件可以被访问 优点 : 可以存储大容量的数据 缺点 : 文件更新或是格式改变可能会导致巨大的编程工作 文件操作 读文件 Context.openFileInput(String name) 打开一个与应用程序联系的私有文件输入流 当文件不存在时抛出 FileNotFoundException

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

書面

書面 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 5.4 互動功能畫面 程式碼請參考附件-程式三 在進入互動頁面時 會執行setAllText()依寵物狀態數值來 設定狀態文字與頭像 並且依心情決定是否要不要播放音效 觸摸的區域 由於是自己寫的 view 所以並未透過xml來設置 而是透過Layut.addview()來動態新增

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 學校系所 : 樹德科技大學資訊工程學系

教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 學校系所 : 樹德科技大學資訊工程學系 教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 (s11639104@stu.edu.tw) 學校系所 : 樹德科技大學資訊工程學系 實驗目的 本實驗的目的在於讓同學們可以了解 Android 系統核心內部的行程通訊的原理, 透過呼叫系統提供的其中一樣服務

More information

PowerPoint 簡報

PowerPoint 簡報 UI 設計 Android 專案目錄架構 Android 專案建立後會自動產生 3 個主要目錄 src:java 程式檔案 res: 資源 ( 文字 圖形 聲音檔案等 ) 與 UI 設定有關的 layout 檔 此目錄內檔案名稱只能為小寫字母 數字 _. gen:r.java 根據 res 目錄內容自動產生 不要去修改 R.java Android 中所有的資源檔案 ( 圖片 XML 等 ) 命名都必須使用英文小寫,

More information

Microsoft PowerPoint - Lab 2-3 Android Google Maps.ppt [相容模式]

Microsoft PowerPoint - Lab 2-3 Android Google Maps.ppt [相容模式] 車輛定位與電子地圖整合服務 定位與 Google Maps Network Optimization Lab Department of Computer Science National Chiao Tung University 1 定位與 Google Maps Lab 簡介 : 路徑軌跡記錄程式 Google Maps 程式技巧 取得目前位置經緯度 建立 Google Maps 標示目前位置

More information

幻灯片 1

幻灯片 1 Delivering accurate maps to Chinese Android users 为中国安卓用户提供准确的地图服务 Work at Mapbox includes: Android apps, demos, starter kits, documentation, support, syncing Android team with other departments, etc.

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Android 编程基础 Android 开发教程 & 笔记 1

Android 编程基础 Android 开发教程 & 笔记 1 Android 开发教程 & 笔记 1 多式样 ProgressBar 撰写 : 地狱怒兽 联系 :zyf19870302@126.com 普通圆形 ProgressBar 该类型进度条也就是一个表示运转的过程, 例如发送短信, 连接网络等等, 表示一个过程正 在执行中 一般只要在 XML 布局中定义就可以了

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

内文-2.indd

内文-2.indd 客户端服务端音乐资源信息 : 1. 项目需求从本项目开始, 我们一起开发一个简单的在线音乐播放器, 它具有以下功能 (1) 程序启动时显示一个启动画面, 如图 1-1 所示 (2) 在程序主页面显示服务器上的歌曲列表, 包括歌手名与歌曲名, 单击列表条目可实现在线音乐播放, 单击 播放 暂停 上一曲 下一曲 按钮可实现对应的功能, 进度条可以显示歌曲播放进度, 如图 1-2 所示 图 1-1 程序启动画面

More information

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8 Smart TPM Rev. 1001 Smart TPM Ultra TPM Smart TPM TPM...3 1. BIOS... 3 2. Infineon TPM Smart TPM... 4 2.1. Infineon TPM...4 2.2. Smart TPM...4 3. TPM... 5 3.1. Smart TPM TPM...5 3.2. Advanced Mode...8

More information

使用手冊

使用手冊 使用手冊 版權所有 2013 年 Microtek International, Inc. 保留所有權利 商標 Microtek MII MiiNDT ScanWizard Microtek International, Inc. Windows Microsoft Corporation 重要須知 Microtek Microtek Windows Microsoft Windows I49-004528

More information

Microsoft PowerPoint - 12 特色开发.ppt [兼容模式]

Microsoft PowerPoint - 12 特色开发.ppt [兼容模式] 手 机 应 用 平 台 软 件 开 发 12 特 色 开 发 刘 宁 Email:liuning2@mail.sysu.edu.cn Android 的 传 感 器 系 统 传 感 器 系 统 综 述 传 感 器 系 统 层 次 结 构 传 感 器 系 统 的 硬 件 抽 象 层 传 感 器 系 统 的 使 用 传 感 器 系 统 综 述 传 感 器 (Sensor) 系 统 可 以 让 智 能 手

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 多个用户界面的程序设计 3.1 页面的切换与传递参数值 3.1.1 传递参数组件 Intent Intent 是 Android 系统的一种运行时的绑定机制, 在应用程序运行时连接两个不同组件 在 Android 的应用程序中不管是页面切换还是传递数据或是调用外部程序都可能要用到 Intent Intent 负责对应用中某次操作的动作 动作涉及的数据 附加数据进行描述, Android

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

目 錄 一 ANDROID 開發系統需求 作業系統 開發工具... 1 二 安裝 ANDROID 開發工具 安裝 JDK 使用 APT-GET 安裝 使用套件管理程式安裝... 9 三 ANDROID 程式撰寫... 1

目 錄 一 ANDROID 開發系統需求 作業系統 開發工具... 1 二 安裝 ANDROID 開發工具 安裝 JDK 使用 APT-GET 安裝 使用套件管理程式安裝... 9 三 ANDROID 程式撰寫... 1 Android On Linux 簡易安裝開發教學 Installing Google Android SDK 2.0.1 On Ubuntu 9.10 Desktop 目 錄 一 ANDROID 開發系統需求... 1 1. 作業系統... 1 2. 開發工具... 1 二 安裝 ANDROID 開發工具... 1 1. 安裝 JDK... 1 2. 使用 APT-GET 安裝... 2 3. 使用套件管理程式安裝...

More information

Android 开发教程

Android 开发教程 封面 1 GUI 可视化设计器 DroidDraw DroidDraw 是一个基于 Java Swing 的 Android 界面设计器, 可以通过它来生成复杂的 Android Layout XML 文 件,Android 的 Layout 和 Swing Layout 中有很好的对应, 设计器的代码编写起来比较容易 2 AnDroidDraw AnDroidDraw 是一个与 DroidDraw

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Android + WebService

Android + WebService Android + Web Service 建國科技大學資管系饒瑞佶 2017/3 V1 呼叫 OpenData Web Service http://data.taipei/opendata/datalist/apiaccess?scope=resourceaquire& rid=e7c46724-3517-4ce5-844f-5a4404897b7d http://data.taipei/opendata/datalist/apiaccess?scope=resourceaquir

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年秋北京 Android是什么 Android不仅仅是一个操作系统 它更是一个完整的软件框 架 Android基于Linux内核 2005年Google公司收购了Android公司 Google公司选择使用Apache许可证开放Android源码

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Microsoft Word - 第3章 Activity.doc

Microsoft Word - 第3章 Activity.doc 第 3 章 Activity 学习目标 u 掌握 Activity 的生命周期 u 掌握 Activity 的四种启动模式 u 掌握显式意图和隐式意图的使用 u 学会使用 Intent 传递数据在现实生活中, 经常会使用手机进行打电话 发短信 玩游戏等, 这就需要与手机界面进行交互 在 Android 系统中, 用户与程序的交互是通过 Activity 完成的 同时 Activity 也是 Android

More information

Microsoft Word - ASM SDK 說明文件

Microsoft Word - ASM SDK 說明文件 System Monitor SDK (for Android) 開發者指南說明書 1. 技術項目簡介 經由簡化的應用程式介面 (Application Programming Interface), 可 提供給 Android 應用程式開發者開發基於 System monitor 的應用程式 2. 應用範圍說明 本技術可應用於具備 Android 系統 2.3.3 以上版本的 Android 嵌入式裝

More information

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp 01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -TableLayout Toast AlertDialog 國立高雄大學資訊工程學系張保榮教授 大綱 TableLayout 版面配置 Toast 版面配置 AlertDialog 版面配置 TableLayout

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

第一章 Android 简介与开发环境搭建

第一章 Android 简介与开发环境搭建 安卓开发环境与常用布局 第一章 Android 简介与开发环境搭建 本章目标 3G 的概念 Android 的改变 Android 开发环境的搭建编写第一个 Android 程序 Android 程序的目录结构 手机发展史 1. 3G 的概念 3G 全称为 :3rd Generation, 中文含义即为第三代数字通信, 是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统 2. 符合 3G

More information

建立Android新專案

建立Android新專案 Android 智慧型手機程式設計 程式設計與應用班 Android 資料庫處理 建國科技大學資管系饒瑞佶 2012/4 V1 2012/8 V2 Android 資料庫 -SQLite 資料庫 SQLite 檔案式資料庫 適合嵌入式系統, 不需要額外安裝系統 OPEN SOURCE 資料庫 SQL 指令與一般 DBMS 大同小異, 但有些微差異 SQLite Android 結構 1 資料 結構

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information

投影片 1

投影片 1 Chapter 13 Android 實戰演練 線上匯率查詢 線上匯率查詢 本節範例將實作一個簡單的線上費率查詢, 利用 Url 查詢台灣銀行的即時匯率, 欲查詢的網址為 http://rate.bot.com.tw/pages/static/uip003.zh- TW.htm 此網頁中每隔幾分鐘會更新一次匯率, 所以範例程式在一開啟時會抓取此網頁並將網頁內容解析後將匯率資料取出 線上匯率查詢 台灣銀行線上即時匯率查詢

More information

Chapter 1: Introduction

Chapter 1: Introduction 目錄 目錄 IX Part 1 擁抱 Android 單元 01 Android 造時勢或是時勢造 Android... 2 Android 從何而來... 3 Android 的功能 應用和商機... 5 先睹為快 - Android 手機和平板電腦模擬器... 7 單元 02 安裝 Android 程式開發工具... 10 不同作業系統的開發工具版本...10 安裝 Android 程式開發工具的步驟...12

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID 58 2016. 14 * LireSolr LireSolr CEDD Ajax CSpace LireSolr CEDD Abstract In order to offer better image support services it is necessary to extend the image retrieval function of our institutional repository.

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一八年秋北京 Android 是什么 Android 不仅仅是一个操作系统, 它更是一个完整的软件框架 Android 基于 Linux 内核 2005 年 Google 公司收购了 Android 公司 Google 公司选择使用 Apache

More information

Microsoft PowerPoint - VB14.ppt

Microsoft PowerPoint - VB14.ppt VB 列表盒 LISTBOX 應用 資科系 林偉川 執行畫面 1 2 1 重要屬性 LISTBOX 物件 (VB6) 新增至 LISTBOX 物件中 ADDITEM 自 LISTBOX 物件中刪除選取物件 REMOVEITEM 自 LISTBOX 物件中取出選取物件 ListIndex 顯示 LISTBOX 物件中紀錄個數 Listcount 3 LISTBOX 物件 (VB.NET) 重要屬性 新增至

More information

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -RelativeLayout Button TextVeiw EditText 國立高雄大學資訊工程學系張保榮教授 大綱 RelativeLayout 版面配置 Button 版面配置 TextView

More information

任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png

任务实施 (1) 创建项目 图 3-1 欢迎界面 首先创建一个工程, 将其命名为 BoXueGu, 指定包名为 com.boxuegu (2) 导入界面图片将欢迎界面所需要的背景图片 launch_bg.png 导入到 drawable 文件夹中, 项目的 icon 图标 app_icon.png 第 3 章注册与登录模块 学习目标 掌握欢迎界面的开发, 能够独立制作欢迎界面 ; 掌握注册和登录模块的开发, 能够实现用户登录功能 博学谷项目的注册与登录模块主要用于创建用户账号, 管理用户信息 当用户注册成功后会跳转到登录界面, 用户登录后可以修改密码以及设置密保, 且只有设置过密保的账户才可以找回密码 本章将针对注册与登录模块进行详细讲解 3.1 欢迎界面 任务综述 在实际开发中, 开启应用程序时首先会呈现一个欢迎界面,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

ltu

ltu 資 訊 管 理 系 學 齡 前 自 主 學 習 之 行 動 裝 置 輔 助 系 統 指 導 教 授 : 李 靜 怡 教 授 組 員 名 單 : 蔡 承 育 988C012 黃 佳 誼 988C026 鄭 亦 琦 988C060 廖 曼 伶 988C108 中 華 民 國 1 0 2 年 5 月 嶺 東 科 技 大 學 資 訊 管 理 系 學 齡 前 自 主 學 習 之 行 動 裝 置 輔 助 系 統

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

封面-12

封面-12 第十二章 701Client TECHNOLOGY CO.,LTD. 701Client 701Server 701Client "701Client", 12-1 :supervisor :supervisor : 1. : 00~99 100 2. : 00~63 ( 63 / / ) 3. : 18 9 4. : 18 9 5. 12-2 TECHNOLOGY CO.,LTD. 701Client

More information

建立Android新專案

建立Android新專案 Android 智慧型手機程式設計 Android Google Maps 建國科技大學資管系饒瑞佶 2012/4 V1 2012/8 V2 2013/5 V3 V4 2014/10 v5 Google Maps Reference: https://developers.google.com/maps/documentation/android/start#creating _an_api_project

More information

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南 Acer Iconia Tab (A500) 平板電腦操作指南 作業系統 :Android 3.0 / 網路頻段 :Wi-Fi 版暫不支援 :Exchange Server 信箱 ( 無法使用 Smart 助手 ) 及手寫輸入法 產品外觀安全保密功能設定數據功能 開關 PIN 碼 ( 暫無資料 ) 更改 PIN 碼 ( 暫無資料 ) 解除 PUK 碼 ( 暫無資料 ) 手機密碼鎖 手動選網 ( 暫無資料

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 Android 控件进阶 要设计出让用户喜欢的 Android 应用程序界面, 除了需要用到在第 2 章讲的最基本的 TextView EditText 和 Button 控件外, 还要用到其他控件, 如 ImageButton 控件 ImageView 控件 RadioButton 控件 CheckBox 控件和 ListView 控件等 本章主要讲解功能强大 应用广泛的一些控件 3.1

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

Microsoft Word zw

Microsoft Word zw 第 1 章 Android 概述 学习目标 : Android Android Android Studio Android Android APK 1.1 1. 智能手机的定义 Smartphone 2. 智能手机的发展 1973 4 3 PC IBM 1994 IBM Simon PDA PDA Zaurus OS 1996 Nokia 9000 Communicator Nokia 9000

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 章 5.1 异常处理 异常 (Exception) 指程序运行过程中出现的非正常现象, 例如用户输入错误 需要处理的文件不存在 在网络上传输数据但网络没有连接等 由于异常情况总是可能发生, 良好健壮的应用程序除了具备用户所要求的基本功能外, 还应该具备预见并处理可能发生的各种异常的功能 所以, 开发应用程序时要充分考虑到各种可能发生的异常情况, 使程序具有较强的容错能力 通常把这种对异常情况进行处理的技术称为异常处理

More information

小应用 Magic8

小应用 Magic8 胡家威 计研135班 http://hujiaweibujidao.github.io/ 小应用 Magic8 Android 系统简介 Android 应用结构 Android 四大组件 Activity 生命周期 Android 资源管理 UI 组件和容器组件 内容概要 ( 上 ) Android 系统简介 Android 市场份额 Android 是如何诞生的? Android 之父 :Andy

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

投影片 1

投影片 1 Chapter 11 Google 服務應用開發 Google 服務應用開發 Google 提供了許多免費服務, 例如搜尋引擎 Google Map Google 翻譯 Google 文件 Google 日曆 GMail Google Talk Youtube 等常見的服務,Google 擁有大量的資料以及對這些資料作分析的能力, 因此可以提供更多元的服務類型 在豐富的資源下將 Google 服務與

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63> 基 于 Android 平 台 的 电 子 拍 卖 系 统 摘 要 本 电 子 拍 卖 系 统 其 实 就 是 一 个 电 子 商 务 平 台, 只 要 将 该 系 统 部 署 到 互 联 网 上, 客 户 都 可 以 在 该 系 统 上 发 布 想 出 售 的 商 品, 也 可 以 对 拍 卖 中 的 商 品 参 与 竞 价 整 个 过 程 无 须 人 工 干 预, 由 系 统 自 动 完 成 本

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information