本課程專為高職生設計,為期 16 週。課程採「先穩固 Java 邏輯、再進入 Android 實戰」的漸進式結構。 前 4 週透過基礎語法建立邏輯與運算思維,第 5 週進行階段性術科測驗檢視成效。自第 6 週起,帶領學生實際進入 Android Studio,透過三個經典實用專案(BMI 計算器、跑馬燈、捷運到站查詢、數字猜謎),逐步熟悉介面開發、使用者互動、訊息交談窗及跨程式啟動等進階技巧。 課程最後將進行綜合性的術科期末測驗,並安排補考週確保每位學生皆能達到基礎開發能力。
- 第 1 週:行動裝置應用概論
- 第 2 週:Java 程式設計基礎語法 (變數、資料型態、運算子)
- 第 3 週:Java 程式設計 (For 迴圈、IF 條件判斷)
- 第 4 週:Java 程式設計 (Array 陣列、Function 函式)
- 第 5 週:🏆 術科期中測驗
- 第 6 週:Java 程式設計使用者介面設計 — 常見基礎元件介紹與 BMI 計算器雛形
- 第 7 週:基本介面元件 — BMI 計算器 (邏輯實裝與 Toast 互動)
- 第 8 週:進階介面元件 — 跑馬燈 (TextView 動畫屬性與 Layout 應用)
- 第 9 週:使用者互動設計 — 跑馬燈 (各種觸發事件與啟動控制)
- 第 10 週:訊息與交談窗 (Dialog) — 臺北捷運列車到站站名 (靜態選單與 AlertDialog 初探)
- 第 11 週:訊息與交談窗 (Dialog) — 臺北捷運列車到站站名 (陣列整合與動態選單實作)
- 第 12 週:啟動程式中其他程式 (Action) — 數字猜謎 (Activity 間跳轉與亂數邏輯)
- 第 13 週:啟動行動裝置內各種程式 (Intent) — 數字猜謎 (進階互動)
- 第 14 週:啟動行動裝置內各種程式 (Intent) — 數字猜謎 (跨 App 啟動運用與結案)
- 第 15 週:🏆 術科期末測驗
- 第 16 週:🎓 術科補考與課程總回顧
目標: 了解行動科技發展史,並完成基礎開發環境建置,初步認識「類別 (Class)」的概念。
- 講授內容:
- 行動作業系統的演進 (Android vs iOS) 與系統架構簡介。
- 開發環境 (Android Studio 或 VSCode Java 環境) 的下載與安裝說明。
- 為什麼 Java 會有 Class (類別) 的概念?
「類別 (Class)」就像是工廠裡的「設計圖藍圖」,而「物件 (Object)」則是工廠對照藍圖量產出來的「實體」。
Java 是一種「物件導向程式語言」,萬物皆物件。為了要蓋出一棟大樓 (App),我們必須先畫設計圖,這就是為什麼所有 Java 程式碼都必須強制寫在
class { }裡面的原因。 - Java 程式架構逐字詳解:
public: 代表公開的,讓這張設計圖能被系統拿去用。class: 宣告這是一張名為 Main 的設計圖。static: 靜態方法。讓電腦在還沒照著設計圖把東西蓋出來前,就能直接執行。void: 執行完畢後沒有回傳值。main(): 程式開始跑的第一個專屬入口。
- 範例程式碼 1 (Hello World 初體驗):
public class Main { public static void main(String[] args) { System.out.println("Hello World! 第一支 Java 程式"); } }
- 範例程式碼 2 (建立人生第一張設計圖 Class):
我們也可以自己畫設計圖。例如,一張描述「狗」的設計圖。
// 檔名:Dog.java (定義了一張狗的設計圖) public class Dog { String name; // 狗的名字屬性 int age; // 狗的年紀屬性 }
- 範例程式碼 3 (把設計圖變成真實的物件實體):
// 在主程式裡面,利用 new 關鍵字,把設計圖實體化變成一隻真的狗! public static void main(String[] args) { Dog myDog = new Dog(); // new = 產生實體物件 myDog.name = "小白"; // 為這隻狗命名 System.out.println("我的狗叫做:" + myDog.name); }
- 實作任務 (Lab):編譯並執行第一支 Hello World 程式,並嘗試建立一個簡單的
Student類別與產生物件。
目標: 建立變數與記憶體概念,熟練基礎數學運算。
- 講授內容:
- 什麼是變數 (Variable)? 把變數想像成是可以貼標籤的「空紙箱」,用來裝不同類型的資料。在 Java 中,我們要先決定這個箱子能裝什麼(宣告型態),才能把資料丟進去。
- 運算子與賦值:
等號
=代表「把右邊的結果丟進左邊的箱子」。搭配+,-,*,/,%計算。 - 範例程式碼 1 (四大基礎變數宣告):
String studentName = "林曉華"; // 字串箱子 int age = 16; // 整數箱子 (年紀不會有小數點) double height = 165.5; // 浮點數箱子 (身高需要精確到小數點) boolean isPass = true; // 布林值箱子 (只有 true 或是 false)
- 範例程式碼 2 (變數的數學運算與重新賦值):
int applePrice = 25; int amount = 5; int total = applePrice * amount; // 右邊 25 * 5 算完後放入 total 箱子 // 中途想再多買兩顆蘋果? amount = amount + 2; // 將原本箱子裡的 5 拿出來加 2,再裝回原本的箱子裡 (變數是可以改變的) System.out.println("現在數量變為:" + amount);
- 範例程式碼 3 (結合字串輸出與 Scanner 互動):
// 運用 Scanner 讀取使用者從鍵盤輸入的整數 import java.util.Scanner; Scanner scan = new Scanner(System.in); System.out.println("請輸入您帶了多少錢:"); int myMoney = scan.nextInt(); int change = myMoney - total; // 計算找零 System.out.println(studentName + " 買蘋果共花費 " + total + " 元,找零 " + change + " 元");
- 實作任務 (Lab):實作「簡易匯率換算機」與商品折扣計算。
目標: 掌握程式的控制流程,讓電腦擁有判斷與重複執行的能力。
- 講授內容:
- 條件分支 (If-Else):
讓電腦擁有判斷力。語法為「
if (成立的條件) { 執行的事 }」。- 條件需要使用邏輯判斷符號:大於 (
>)、小於 (<)、相符 (==)、不相等 (!=)。 - 複合條件:
&&代表「且 (AND)」;||代表「或 (OR)」。
- 條件需要使用邏輯判斷符號:大於 (
- 範例程式碼 1 (單純的 If-Else 判斷):
int score = 75; if (score >= 60) { System.out.println("太棒了!及格!"); } else { System.out.println("不及格,準備補考!"); }
- 範例程式碼 2 (多重條件 Else-If 判斷):
int money = 1500; if (money >= 2000) { System.out.println("去吃牛排大餐!"); } else if (money >= 1000) { System.out.println("去吃平價火鍋!"); } else { System.out.println("回家吃泡麵!"); }
- 迴圈控制 (For Loop):
需要重複執行程式碼時使用。結構為
for(初始狀態 ; 繼續跑的條件 ; 每跑一圈做的事)。 - 範例程式碼 3 (基礎 For 迴圈計數):
// 從 i=1 開始;只要 i <= 5 就繼續跑;每跑完大括號就讓 i+1 for (int i = 1; i <= 5; i++) { System.out.println("現在是跑道上的第 " + i + " 圈"); }
- 範例程式碼 4 (迴圈結合 If 進行篩選):
// 找出 1 到 10 之間的「偶數」 for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { // 如果除以二的餘數是零 System.out.println(i + " 是偶數"); } }
- 條件分支 (If-Else):
讓電腦擁有判斷力。語法為「
- 實作任務 (Lab):利用
If-Else實作遊樂園收費標準判定,並運用迴圈印出九九乘法表。
目標: 學習大量資料的儲存方式,並學會將重複邏輯抽離為獨立的方法。
- 講授內容:
- 陣列 (Array):
想像陣列是一個有編號的「置物櫃」,專門用來整齊存放多個「相同型態」的資料。置物櫃的第一個號碼 (Index 索引) 是從
0開始算起。 - 範例程式碼 1 (陣列的宣告與讀取):
// 建立一個有三個層板的字串置物櫃,放置朋友的名字 String[] friends = { "小明", "阿華", "阿嬌" }; // 電腦規定陣列的索引 (Index) 是從 0 開始的 System.out.println("我最好的朋友是:" + friends[0]); // 會印出小明 System.out.println("我第二個朋友是:" + friends[1]); // 會印出阿華
- 範例程式碼 2 (陣列與迴圈的完美組合):
int[] scores = { 80, 95, 60, 70, 100 }; int total = 0; // 利用陣列的 length 屬性來決定迴圈要跑幾次,自動加總全班成績! for (int i = 0; i < scores.length; i++) { total = total + scores[i]; } System.out.println("全班總分數是:" + total);
- 函式 (Function / Method): 函式就像是一台「果汁機」,你把水果 (參數) 丟進去,它隱藏內部的複雜運算過程,最後吐出一杯果汁 (回傳值) 給你。 好處是:相同的程式碼不用重複寫很多次,只要呼叫這台果汁機就好。
- 範例程式碼 3 (打造自己的數學函式果汁機):
// 建立一個名為 calculateArea (算面積) 的函式,規定要丟入寬和高,最後吐出一個總面積 public static int calculateArea(int width, int height) { int area = width * height; return area; // return 就是吐出果汁 (回傳結果) }
- 範例程式碼 4 (在主程式中呼叫函式):
public static void main(String[] args) { // 主程式非常乾淨,直接啟動已經寫好的函式! int room1 = calculateArea(10, 5); int room2 = calculateArea(20, 20); System.out.println("一號房間面積:" + room1); System.out.println("二號房間面積:" + room2); }
- 陣列 (Array):
想像陣列是一個有編號的「置物櫃」,專門用來整齊存放多個「相同型態」的資料。置物櫃的第一個號碼 (Index 索引) 是從
- 實作任務 (Lab):撰寫 Function 計算出陣列內成績的平均分數。
測驗形式: 上機實作 (120 分鐘)。測驗前 4 週教導的變數、運算、If-Else、For 迴圈與基礎 Array 處理。
目標: 進入 Android 介面設計,學習 XML 佈局基礎。
- 講授內容:
- XML 佈局語言 (Extensible Markup Language): 用來設計 App 長什麼樣子的標籤語言。負責外觀長相,不管背後的邏輯。我們利用積木般的標籤疊出畫面。
- 約束佈局 (ConstraintLayout): 不像是 Word 裡的換行排列。由於每一支手機螢幕大小都不同,所以我們替元件綁上透明的「彈簧橡皮筋 (約束線 Constraint)」,互相拉扯來達到不管在平板還是小手機上,元件都能漂亮置中的效果。
- 常見的三大 UI 基礎元件:
TextView:展示文字用的告示牌 (使用者只能看,不能改)。EditText:可以讓使用者點擊並跳出虛擬小螢幕鍵盤打字的輸入框。Button:可以按壓產生互動的按鈕。
- 範例程式碼 1 (TextView 標題告示牌):
<TextView android:id="@+id/tvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="歡迎使用 BMI 健康計算器" android:textSize="24sp" /> <!-- sp 是文字專用的字體大小單位 -->
- 範例程式碼 2 (EditText 數字輸入框):
<!-- EditText:設定為只能輸入數字型小數點 (numberDecimal) --> <EditText android:id="@+id/editWeight" <!-- 給它身分證字號,方便寫 Java 接觸 --> android:layout_width="match_parent" <!-- 寬度拉滿撐開到跟手機螢幕一樣寬 --> android:layout_height="wrap_content" <!-- 高度只要夠包住裡面的文字就好 --> android:hint="請輸入體重 (kg)" <!-- 背景漂浮的灰色提示文字 --> android:inputType="numberDecimal" />
- 範例程式碼 3 (Button 功能按鈕):
<Button android:id="@+id/btnCalculate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="開始計算" android:backgroundTint="#FF6200EE" /> <!-- 改變按鈕底色 -->
- 實作任務 (Lab):利用 XML 拉出具有大標題與精美輸入框的 BMI 計算器介面。
目標: Java 與 XML 結合,綁定按鈕監聽器並計算結果。
- 講授內容:
- 讓畫面產生靈魂的兩個步驟:
- 尋人啟事 (
findViewById):利用上週在 XML 寫下的身分證字號 (id),把虛擬的畫面元件綁定到實體的 Java 變數上。 - 裝上竊聽器 (
setOnClickListener):幫按鈕變數綁定一個耳朵。當使用者點擊這個按鈕時,電腦就會馬上啟動大括號{}裡面的魔法邏輯。
- 尋人啟事 (
- 資料型態強力轉換 (
Double.parseDouble): 在輸入框打下的「50.5」對電腦來說是毫無計算能力的「文字符號」。我們必須強制對它施法,將字串 (String) 轉成帶小數點的浮點數數字 (Double),才能進行數學乘除運算。 - 範例程式碼 1 (尋找綁定 XML 元件):
// 在 Java 程式碼一開頭,把等一下要控制的三個積木全挖出來建立變數 Button btnCalc = findViewById(R.id.btnCalculate); EditText editWeight = findViewById(R.id.editWeight); EditText editHeight = findViewById(R.id.editHeight);
- 範例程式碼 2 (點擊按鈕擷取與運算):
// 給按鈕掛上竊聽器 (監聽器) btnCalc.setOnClickListener(v -> { // 從 EditText 拿取文字,因為預設是字串,必須透過 parseDouble 強制轉成數字變數 double weight = Double.parseDouble(editWeight.getText().toString()); // 假設身高已經在設計時限制輸入的是「公分」,因此需要除以 100 變公尺 double heightString = Double.parseDouble(editHeight.getText().toString()); double heightInMeter = heightString / 100.0; // 進行 BMI 公式數學計算 (體重除以身高的平方) double bmi = weight / (heightInMeter * heightInMeter); });
- 範例程式碼 3 (短暫畫面回饋 Toast 吐司):
// 搭配範例 2,算完結果後我們不能裝沒事,要立刻跳出畫面通知使用者結果! // Toast 就像烤土司機一樣,會從畫面上方/下方短暫彈出一個黑色的半透明文字框 Toast.makeText(this, "計算成功!您的 BMI 為: " + bmi, Toast.LENGTH_SHORT).show();
- 讓畫面產生靈魂的兩個步驟:
- 實作任務 (Lab):實裝完整體重與身高擷取,計算後用 Toast 顯示正確的 BMI 數值。
目標: 介紹動態文字效果,了解部分文字專屬的 XML 屬性組合。
- 講授內容:
- 什麼是跑馬燈 (Marquee)? 當新聞標題太長,一行寫不完卻又不想換行時,就會讓文字像無接觸式輸送帶一樣從右邊滑到左邊。
- 讓 TextView 動起來的四大金剛屬性:
singleLine="true":強制文字不准換行,全部擠在同一行。ellipsize="marquee":當文字超過螢幕寬度時,尾端不要變成「...」,而是採用跑馬燈模式。marqueeRepeatLimit="marquee_forever":設定跑馬燈要跑幾次?(這邊設定無限重複)。- 需要在 Java 中賦予「焦點 (Focus)」,文字才會真的開始移動。
- 範例程式碼 1 (一般過長文字標題的慘況):
<!-- 預設如果寬度固定,文字太長時它會自動在畫面塞滿時幫你換行往下縮 --> <TextView android:layout_width="200dp" android:layout_height="wrap_content" android:text="這是一則非常長的新聞標題,如果什麼都不設定它就會自動變成好幾行..." />
- 範例程式碼 2 (尾端加上點點點的省略號):
<!-- 利用 ellipsize="end" 屬性,讓超過兩行的文字最後以 ... 省略 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="政府剛剛發布了強烈颱風特報,預計明天全台將會宣布停班停課的消息!" android:maxLines="1" android:ellipsize="end" />
- 範例程式碼 3 (正式啟動:跑馬燈完全體):
<TextView android:id="@+id/tvMarquee" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="政府發布強烈颱風特報,預計明天全台將宣布停班停課,請出門民眾小心自身安全..." android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" />
- 實作任務 (Lab):設計新聞 App 首頁,上方放一條美觀的新聞快訊跑馬燈 (
TextView)。
目標: 控制跑馬燈的狀態 (焦點) 與動態替換文字。
- 講授內容:
- 什麼是元件的焦點 (Focus)?
想像舞台上只有一盞聚光燈,燈打在誰身上,誰就能有動作。文字框預設是沒有焦點的,所以我們必須用程式碼強制把聚光燈打在跑馬燈上 (
setSelected(true)),它才會開始捲動。 - 動態替換文字與顏色: 我們不僅能在 XML 設定文字,還能透過 Java 在程式執行中途,隨時攔截並把文字換掉。
- 範例程式碼 1 (強制獲得焦點開始撥放):
TextView tvMarquee = findViewById(R.id.tvMarquee); // 進入這個 Activity 時,直接塞一盞聚光燈給它,文字就會開始走馬看花 tvMarquee.setSelected(true);
- 範例程式碼 2 (暫停按鈕:移除焦點):
Button btnPause = findViewById(R.id.btnPause); btnPause.setOnClickListener(v -> { // 設定點擊暫停鈕後,把跑馬燈の焦點拿走 (false),帶狀捲動就會立刻煞車靜止 tvMarquee.setSelected(false); });
- 範例程式碼 3 (按下按鈕後動態改變文字與顏色狀態):
Button btnChange = findViewById(R.id.btnChange); btnChange.setOnClickListener(v -> { // setText() 指令可以用來在中途竄改畫面的文字內容 tvMarquee.setText("緊急快訊:明日本地停水公告!"); // 為了引起注意,我們可以把文字顏色改成紅色 tvMarquee.setTextColor(android.graphics.Color.RED); });
- 什麼是元件的焦點 (Focus)?
想像舞台上只有一盞聚光燈,燈打在誰身上,誰就能有動作。文字框預設是沒有焦點的,所以我們必須用程式碼強制把聚光燈打在跑馬燈上 (
- 實作任務 (Lab):製作三個按鈕控制跑馬燈的「暫停(移除焦點)」、「播放」與「替換成緊急插播文字」。
目標: 學習 AlertDialog 的實作與生命週期。
- 講授內容:
- 為什麼不用 Toast 就好?
Toast 像是一閃而過的流星,幾秒鐘就不見了。如果遇到「你確定要刪除所有照片嗎?」這種攸關生死的操作,我們需要一個會把畫面卡住、強迫使用者按「確定」或「取消」的對話框,這就是
AlertDialog。 - 建造者模式 (Builder): 蓋房子要一步一步來:先打地基 (Builder),設定外觀 (setTitle 跟 setMessage),安裝前門後門 (設定確定與取消按鈕),最後再揭開布幕 (show)。
- 範例程式碼 1 (打地基與設定標題內文):
// 準備建商 (Builder),this 代表要蓋在目前的畫面上 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("系統提示"); builder.setMessage("歡迎使用臺北捷運查詢系統!");
- 範例程式碼 2 (安裝確認按鈕與取消按鈕):
// PositiveButton 通常代表「好/確定/同意」 builder.setPositiveButton("我知道了", (dialog, which) -> { Toast.makeText(this,"使用者按下了確定", Toast.LENGTH_SHORT).show(); }); // NegativeButton 通常代表「取消/拒絕」 builder.setNegativeButton("關閉", (dialog, which) -> { // 什麼都不寫,對話框也會自動關掉 });
- 範例程式碼 3 (揭開布幕:顯示視窗):
// 前面設定再多,如果沒有呼叫 show(),對話框是永遠不會跑出來的! builder.show();
- 為什麼不用 Toast 就好?
Toast 像是一閃而過的流星,幾秒鐘就不見了。如果遇到「你確定要刪除所有照片嗎?」這種攸關生死的操作,我們需要一個會把畫面卡住、強迫使用者按「確定」或「取消」的對話框,這就是
- 實作任務 (Lab):完成捷運查詢介面,點擊按鈕跳出說明對話框,點選「了解」後關閉。
目標: 在 AlertDialog 中提供能讓使用者點選的選單陣列 (List)。
- 講授內容:
- 把陣列變成選項清單:
我們之前學過用大括號
{}存放很多文字的String陣列。現在我們可以把這個陣列餵給AlertDialog,它就會自動長成一個可以點擊的選單! - 捕捉使用者的點擊 (which):
程式怎麼知道你點了第幾個選項?透過事件中的
which參數(它其實就是我們學過的陣列索引 Index,從 0 開始算),就能反查出站名。 - 範例程式碼 1 (建立資料陣列):
// 準備好裝滿站名的陣列,這些就是等一下要變成選單的項目 String[] stations = {"台北車站", "中山站", "雙連站", "民權西路站"};
- 範例程式碼 2 (把陣列塞進對話框):
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("請選擇您目前所在的捷運站"); // setItems:專門用來吃陣列資料的屬性 builder.setItems(stations, (dialog, which) -> { // 這裡可以寫選項被點擊後的邏輯 });
- 範例程式碼 3 (取出被點擊的資料):
// 接續上面的 setItems 內部... // which 代表使用者選了第幾個索引 (例如點中山站, which 就是 1) String selectedStation = stations[which]; Toast.makeText(this, "您選擇了:" + selectedStation, Toast.LENGTH_SHORT).show(); // 點擊選項後,彈出視窗會自動關閉,不用手動寫 close
- 把陣列變成選項清單:
我們之前學過用大括號
- 實作任務 (Lab):實作帶有多個捷運站名的點選對話框,選擇站點後透過 Toast 提示下一班車何時抵達。
目標: 學習 Activity 跳轉 (Intent) 與亂數取得。
- 講授內容:
- Activity 的分身術:
一個畫面就是一個
Activity。如果要製作多個畫面的 App,我們就需要新增Activity。 - 顯式意圖 (Explicit Intent):
意圖 (Intent) 就像計程車。顯式意圖就是「明確指名道姓」要送到哪裡。我們叫計程車從現在的畫面 (
MainActivity.this),開車前往遊戲畫面 (PlayActivity.class)。 - 範例程式碼 1 (建立跳轉計程車):
// 準備計程車 (從這裡 MainActivity, 去那裡 PlayActivity) Intent intent = new Intent(MainActivity.this, PlayActivity.class);
- 範例程式碼 2 (攜帶資料與發車):
// 把玩家的名字當作伴手禮放進計程車後車廂 (名為 "PLAYER_NAME") intent.putExtra("PLAYER_NAME", "小智"); // 開車!(開始轉換畫面) startActivity(intent);
- 範例程式碼 3 (透過亂數產生電腦解答):
// === 進入第二頁遊玩頁面後,電腦要自己想一個答案 === // Math.random() 會給 0.00 ~ 0.99 之間的小數。 // 乘上 100,變成 0.00 ~ 99.X,強制去尾轉整數變成 0 ~ 99,再加 1 變成 1 ~ 100。 int randomAnswer = (int)(Math.random() * 100) + 1; System.out.println("偷偷印出電腦想的隨機解答:" + randomAnswer);
- Activity 的分身術:
一個畫面就是一個
- 實作任務 (Lab):打造數字猜謎遊戲的首頁,點擊開始鈕後跳轉至另一個產生好亂數密碼的 Activity。
目標: 實作猜謎核心運算,將所有元件控制與條件判斷進行綜合。
- 講授內容:
- 終極大串聯:
把本學期學過的
EditText讀取、文字轉數字 (Integer.parseInt)、if-else三重判斷 (太大/太小/猜中),全部融合在一起! - 提升遊戲體驗 (UX):
猜錯時,如果原本打的數字還留在框框裡,玩家要先刪除才能重打,很煩人。我們可以寫
editGuess.setText("")把框框清成空字串。 - 範例程式碼 1 (讀取玩家數字並轉型):
// 從輸入框拿文字,強制轉成 int 整數 String guessText = editGuess.getText().toString(); int guess = Integer.parseInt(guessText);
- 範例程式碼 2 (If-Else 核心猜對邏輯):
if (guess == randomAnswer) { tvClue.setText("Bingo!恭喜猜對了!"); btnGuess.setEnabled(false); // 猜中就把按鈕反白鎖死,避免重複點擊 }
- 範例程式碼 3 (猜錯邏輯與清空對話框):
else if (guess > randomAnswer) { tvClue.setText("太大了,請往更小的數字猜!"); editGuess.setText(""); // 貼心設計:清空文字框,讓玩家省去刪除的時間 } else { tvClue.setText("太小了,請往更大的數字猜!"); editGuess.setText(""); }
- 終極大串聯:
把本學期學過的
- 實作任務 (Lab):設計輸入框與猜測按鈕。每次猜測給予提示,最多只能猜 5 次,次數用完需提示 Game Over。
目標: 隱式意圖 (Implicit Intent) 的威力,啟動手機原生的其他應用程式 (瀏覽器、分享機制等)。
- 講授內容:
- 隱式意圖 (Implicit Intent): 這次的計程車「不指名道姓」去哪,而是發出廣播:「誰可以幫我開網頁?」。手機裡只要有瀏覽器能力 (Chrome, Firefox) 的 App 都會舉手報名,系統就會自動開起外部 App 來服務我們。
- 跨 App 的威力:
透過
Intent.ACTION_VIEW開啟網址;透過Intent.ACTION_DIAL叫出撥號鍵盤。 - 範例程式碼 1 (隱式意圖啟動外部瀏覽器上網):
btnSearchCheat.setOnClickListener(v -> { // 準備一個網址,交給 Uri 解析 Uri webUri = Uri.parse("https://www.google.com/search?q=猜數字必勝法"); // ACTION_VIEW: 大眾查看動作的隱式廣播 Intent webIntent = new Intent(Intent.ACTION_VIEW, webUri); startActivity(webIntent); // 啟動 Chrome });
- 範例程式碼 2 (隱式意圖啟動內建撥號鍵盤):
btnCallHelp.setOnClickListener(v -> { // tel: 開頭代表電話號碼協議 Uri dialUri = Uri.parse("tel:0912345678"); // ACTION_DIAL: 呼叫撥號鍵盤 Intent callIntent = new Intent(Intent.ACTION_DIAL, dialUri); startActivity(callIntent); });
- 範例程式碼 3 (判斷意圖是否安全):
// 預防萬一手機裡沒有能開網頁的 App,直接跳轉會導致程式閃退 (Crash) if (webIntent.resolveActivity(getPackageManager()) != null) { startActivity(webIntent); } else { Toast.makeText(this,"找不到可以開啟網頁的工具!", Toast.LENGTH_SHORT).show(); }
- 實作任務 (Lab):在猜謎結算畫面加入「搜尋必勝法」與「電話求救」兩顆按鈕,呼叫系統對應的 App (Browser / Action_Dial)。
目標: 評量學生對於 Android 基礎開發與 Java 邏輯的綜合應用能力。
- 測驗題庫:👉 點擊檢視 10 題期末術科測驗題庫與解答
- 測驗形式: 120-150 分鐘的實務專案開發。要求學生抽考一題,從無到有,設計包含 UI (排版、跑馬燈) 與後端互動邏輯 (按鈕控制、數值轉換、If-Else 判斷、AlertDialog 防呆),並完成跨 Activity Intent 的整合微型 App。
- 實作任務 (Lab):完成期末專題測驗繳交。
目標: 未達標者進行補考,其餘同學進行 Android 進階知識指引與課程重點總複習。
- 補考題庫:👉 點擊檢視 10 題補考測驗題庫與解答
- 講授內容:
- 常見期末錯誤與 Debug 技巧解析。
- 下一步學習建議 (如進階元件 RecyclerView、網路連線 API 或 Kotlin 語言轉換)。
- 實作任務 (Lab):補考實務測驗與期末成績確認。