東 海 大 學 資 訊 工 程 系 專 題 實 驗 報 告 書 嵌 入 式 系 統 行 動 裝 置 應 用 - 實 作 遊 覽 器 系 統 結 合 伺 服 器 在 android 平 台 上 Application of Embedded Machine on Mobile Devices- Implement the sighseeing system connecting with android platorm 963821 鄭 欽 仁 963829 陳 育 楙 指 導 老 師 : 蔡 清 欉 教 授 Tunghai University, 40704 Taichung, Taiwan R.O.C. 中 華 民 國 99 年 12 月 15 日 I
內 容 壹 專 題 摘 要... 1 一 研 究 動 機... 1 二 研 究 目 標... 1 三 背 景 簡 介... 2 1. Android 是 免 費 且 開 放 的 手 機 開 發 平 台... 2 2. 開 放 式 手 持 平 台 聯 盟... 2 3. 在 Android Market 販 售 開 發 軟 體... 3 4. 名 詞 解 釋... 3 貳 系 統 架 構 與 設 計... 4 一 系 統 架 構... 4 二 系 統 目 錄 架 構... 5 三 程 式 設 計 架 構... 7 1. 開 發 程 式 架 構... 7 2. 設 計 Android Manifest 應 用 程 式 定 義 檔... 8 3. R.java 資 源 類 別 程 式 碼 的 定 義... 9 4. XML 資 源 檔 案 設 計... 9 四 程 式 運 作 原 理... 11 1. Android 程 式 運 作 原 理... 11 2. Activity Life Cycle( 生 命 週 期 )... 11 3. Android 應 用 程 式 運 作 模 型... 12 五 軟 硬 體 配 置 情 形... 13 1. 硬 體 安 裝 條 件... 13 2. 軟 體 安 裝 條 件... 13 3. 設 定 Andorid 模 擬 器... 13 4. 實 機 -HTC Desire... 15 叁. 研 究 方 法 與 步 驟... 15 一 建 立 新 的 專 案... 15 二 地 圖 控 制... 15 1. 設 定 MapView... 15 2. 檢 視 地 圖 類 型... 22 3. 縮 放 尺 度... 22 II
三 QrCode... 23 四 android 資 料 庫 SQLite 製 作 與 讀 取... 27 五 Android 透 過 php 與 資 料 庫 連 結... 29 六 語 音 辨 識... 32 肆. 實 驗 結 果 與 展 示... 34 一 功 能 流 程 圖... 34 伍 結 論 與 未 來 展 望... 40 陸 參 考 文 獻 與 網 站... 42 一 取 得 KML 值... 43 二 使 用 KML 值 查 詢 地 圖... 43 III
圖 目 錄 表 目 錄 Figure 1 android architecture... 4 Figure 2 R.java 資 源 類 別 原 始 碼 範 例... 9 Figure 3 strings.xml 文 字 資 源 檔 範 例... 9 Figure 4 colors.xml 顏 色 設 定 資 源 檔 範 例... 10 Figure 5 main.xml 佈 局 資 源 檔 範 例... 11 Figure 6 Activity Life Cycle 運 作 圖... 12 Figure 7 Android 應 用 程 式 運 作 模 型... 12 Figure 8 HTC Desire... 15 Figure 9 debug.keystore 位 置... 16 Figure 10 MD5 指 紋 訊 息... 17 Figure 11 選 擇 Google APIs... 18 Figure 12 map.jar... 19 Figure 13 解 碼 函 式 庫... 24 Figure 14 靜 態 QR 截 圖... 25 Figure 15 動 態 QR 截 圖... 27 Figure 16 android 連 結 php 資 料 庫... 29 Figure 17 PHP 網 頁 資 料 截 圖... 31 Table 1 Android 系 統 目 錄 架 構... 5 Table 2 Android 程 式 設 計 專 案 檔 案 結 構 表... 7 Table 3 AndroidManifest XML 標 籤 語 法 層 級 表... 8 Table 4 顏 色 設 定 語 法 表... 10 Table 5 硬 體 安 裝 基 本 需 求... 13 Table 6 軟 體 安 裝 基 本 需 求... 錯 誤! 尚 未 定 義 書 籤 Table 7 HTC Desire 規 格 表... 15 Table 8 Android 專 案 設 定... 15 Table 9 地 圖 檢 視 模 式... 22 IV
壹 專 題 摘 要 一 研 究 動 機 研 究 動 機 來 源 是 有 天 去 大 賣 場 要 買 想 要 的 東 西 時, 有 時 候 可 能 需 要 花 費 一 段 時 間 去 找 尋 想 要 的 物 品, 或 者 是 去 問 店 員 東 西 在 哪 裡 的 時 候, 卻 還 是 需 要 繞 一 下 位 置 才 能 發 現 想 要 的 物 品, 於 是 我 們 就 在 想 是 不 是 能 透 過 android 的 功 能 的 完 整 來 快 速 來 找 尋 想 要 的 物 品, 而 當 我 們 做 到 單 一 的 商 家 查 詢 時 一 半 時 卻 發 現 如 果 是 相 同 類 型 商 家 或 者 不 是 商 家 時, 是 不 是 也 能 透 過 連 結 資 料 庫 的 不 同 來 取 得 店 家 內 的 資 料, 於 是 我 們 開 始 想 要 嘗 詴 想 要 在 android 的 平 台 上 連 結 到 資 料 庫 上 面 來 取 得 所 有 資 料 此 外 我 們 還 希 望 透 過 連 結 不 同 商 家 的 性 質 的 不 同, 而 有 可 以 有 功 能 性 的 不 同 選 擇, 例 如 : 賣 場 可 以 透 過 android 掃 描 系 統, 來 跟 資 料 庫 互 動 取 的 價 錢, 最 後 可 以 查 詢 總 價, 或 者 是 在 景 點 內 的 額 外 功 能 是 可 以 查 詢 這 附 近 最 熱 門 的 景 點 然 後 查 詢 googlemap 位 置 在 哪 裡 由 於 上 述 原 因, 本 專 題 實 作 的 重 點 在 於 :android 結 合 資 料 庫 的 然 後 再 透 過 android 平 台 的 功 能 來 開 發 應 用 這 的 想 法 二 研 究 目 標 透 過 在 Android 平 台 上 開 發 的 應 用 程 式, 讓 使 用 者 能 在 手 機 中 輕 鬆 查 看 商 家 或 景 觀 的 所 在 地 點 及 詳 細 資 訊, 可 省 下 輸 入 關 鍵 字 查 詢 及 觀 看 資 訊 等 麻 煩 的 手 續 其 內 容 包 含 : 使 用 便 利 希 望 透 過 android 定 位 系 統, 來 直 接 查 詢 附 近 商 家 或 景 點 有 什 麼 因 連 結 資 料 庫 性 質 不 同 而 有 不 同 功 能 如 果 是 商 家 就 進 入 商 家 的 功 能, 如 果 是 景 點 就 進 入 景 點 的 功 能 動 態 更 新 資 訊 因 連 結 到 資 料 庫 裡 頭, 只 要 更 動 裡 面 資 料, 頁 面 資 料 就 可 以 更 新 提 供 不 同 搜 尋 方 法 除 了 提 供 傳 統 鍵 盤 輸 入 文 字 查 詢, 還 希 望 透 過 結 合 android 語 音 辨 識 的 功 能 來 作 查 詢 1
三 背 景 簡 介 Android( 機 器 人 ) 是 Google 以 Linux 為 基 礎 的 作 業 系 統 平 台, 與 Windows Mobile(Microsoft 提 供 ) iphoneos(apple 提 供 ) 等 手 機 作 業 系 統 處 在 同 一 級 別 除 了 作 業 系 統 之 外, 它 還 包 含 中 介 軟 體 (Middleware) 負 責 硬 體 與 應 用 程 式 之 間 的 溝 通 一 堆 手 機 應 用 軟 體 還 有 Android SDK/NDK 應 用 軟 體 開 發 套 件, 允 許 嵌 入 式 系 統 的 開 發 人 員 使 用 它 來 開 發 Android 平 台 的 應 用 程 式 Android 的 所 有 應 用 程 式 用 Java 語 言 撰 寫, 然 後 透 過 AndroidRuntime 的 Dalvik Virtual Machine 來 轉 換 執 行 DX Bytecode, 應 用 程 式 的 使 用 者 圖 形 介 面 部 分 則 透 過 XML 程 式 來 設 計 而 Google 六 月 份 釋 出 的 Android 1.5 NDK(Native Development Kit), 讓 開 發 人 員 可 透 過 C 或 C++ 等 程 式 語 言 撰 寫 Android 應 用 程 式 更 通 俗 的 說,Android 並 不 是 一 支 手 機, 是 在 手 機 上 使 用 的 作 業 系 統, 軟 體 是 免 費 的, 原 始 碼 也 完 全 開 放, 以 下 介 紹 幾 個 特 點 : 1. Android 是 免 費 且 開 放 的 手 機 開 發 平 台 免 費 讓 全 球 的 行 動 裝 置 製 造 商 任 意 搭 載 Android 作 業 系 統, 而 不 需 付 授 權 金 給 Google, 大 幅 降 低 了 手 機 的 製 造 成 本 且 以 開 放 原 始 碼 的 Linux 作 為 系 統 核 心, 還 開 放 核 心 以 上 的 開 發 工 具, 讓 上 層 的 應 用 開 發 者 可 在 統 一 的 平 台 上 開 發 程 式 若 在 將 來 各 廠 商 能 統 一 採 用 Android 的 話, 不 同 手 機 間 的 使 用 與 溝 通 方 式 會 更 一 致, 可 讓 資 訊 順 利 的 流 通 或 整 合 2. 開 放 式 手 持 平 台 聯 盟 為 了 Android 的 未 來 發 展 與 開 發 商 機,Google 集 合 了 各 業 者 共 同 組 成 開 放 式 手 持 平 台 聯 盟 以 下 為 原 本 的 OHA 創 始 會 員 : 電 信 系 統 商 : 中 國 移 動 通 信 (China Mobile) 日 本 KDDI NTT DoCoMo 美 國 Nextel T-Mobile 義 大 利 Telecom Italia 西 班 牙 Telefonica 半 導 體 晶 片 商 :Audience( 語 音 晶 片 ) Broadcom( 通 訊 晶 片 ) Intel(CPU) Marvell( 網 通 晶 片 ) nvidia( 繪 圖 晶 片 ) Qualcomm SiRF(GPS 晶 片 ) Synapics( 硬 體 存 取 介 面 晶 片 ) Texas Instruments( 德 州 儀 器 無 線 通 訊 晶 片 ) 手 機 硬 體 製 造 商 : 台 灣 HTC 韓 國 LG Samsung 美 國 Motorola 軟 體 廠 商 : 除 了 Google 本 身 提 供 Google search Google map Gmail Youtube 等 服 務 外, 還 有 眾 多 軟 體 公 司 加 入 LivingImage ebay Esmertec Ascender Google LiveWireMobile NuanceCommunications PacketVideo SkyPop SONiVOX 2
商 品 化 公 司 :Aplix Corporation Noser Engineering TAT-The Astonishing Tribe Wind River 3. 在 Android Market 販 售 開 發 軟 體 Android Market 網 址 :http://www.android.com/market/ (1) 上 載 應 用 軟 體 : 只 要 三 個 步 驟 就 可 以 發 布 您 的 程 式 註 冊 為 商 人 ( 註 冊 費 為 25 美 元, 採 信 用 卡 支 付 ) 上 載 並 描 述 應 用 程 式 功 能 發 布 應 用 程 式 (2) 下 載 應 用 程 式 :Android Market 上 的 應 用 程 式 大 部 分 是 免 費 的, 有 的 則 需 付 費 只 要 點 選 手 機 裡 Android Market 的 圖 示 就 可 直 接 連 結 到 該 網 站 進 行 下 載 動 作 4. 名 詞 解 釋 Dalvik Virtual Machine:Dalvik 虛 擬 機 器 是 一 種 暫 存 器 型 態 的 虛 擬 機 器 簡 稱 DVM,DVM 在 撰 寫 開 發 時 就 已 經 設 想 用 最 少 的 記 憶 體 資 源 來 執 行, 以 及 同 時 可 執 行 多 個 VM 為 前 提 來 開 發 的 DX Bytecode:Android 裡 頭 提 供 了 一 個 工 具 程 式 叫 dx, 可 以 把 Java bytecode 再 翻 譯 成 dex, 這 樣 Dalvik 就 知 道 怎 麼 執 行 它 了 3
貳 系 統 架 構 與 設 計 一 系 統 架 構 Figure 1 android architecture 基 本 上 Android 系 統 架 構 中, 最 上 層 的 Application 與 Application Framework 都 是 使 用 Java 語 言 寫 成 的, 而 中 間 層 的 Dalvik 虛 擬 機 器 與 Libraries 則 採 用 C/C++ 語 言 寫 成, 最 底 層 的 Linux 系 統 核 心 則 採 用 C 語 言 寫 成 因 此 底 層 的 Linux 作 業 系 統 已 經 被 Android 上 層 的 應 用 程 式 包 裝 起 來,Android 使 用 者 與 程 式 開 發 人 員 僅 會 接 觸 到 最 上 層 的 應 用 程 式 與 應 用 架 構, 而 Java 語 言 所 開 發 的 應 用 程 式 則 會 透 過 Google 所 開 發 的 Dalvik 虛 擬 機 器, 讓 所 開 發 的 Java 程 式 可 以 在 C 語 言 寫 成 的 Linux 平 台 上 正 常 執 行 如 果 深 入 看 其 系 統 架 構, 總 共 包 含 四 個 主 要 層 次, 如 Figure 1 所 示 以 下 說 明 各 層 內 容 : Application ( 應 用 程 式 ): 最 上 層 為 Java 應 用 程 式, 例 如 Google Maps Email 即 時 通 計 算 機 瀏 覽 器 通 訊 錄 MP3 播 放 器 等 等 應 用 程 式 Application Framework ( 應 用 軟 體 架 構 ): 所 有 Android 核 心 應 用 程 式 framework API 的 總 集 合, 主 要 目 的 是 讓 程 式 開 發 者 可 以 方 便 取 用 這 些 4
常 用 的 應 用 程 式 設 計 架 構, 以 便 快 速 地 開 發 Android 應 用 程 式, 而 這 些 常 見 的 API 例 如 : 顯 示 功 能 ( 包 含 : 訊 息 方 塊 條 列 訊 息 按 鈕 內 嵌 式 瀏 覽 器 等 ) 訊 息 提 供 功 能 ( 圖 形 地 方 化 字 串 佈 局 檔 案 等 ) 提 示 訊 息 ( 主 要 用 來 顯 示 警 告 訊 息, 特 別 是 當 使 用 者 操 作 錯 誤 時 ) 等 等 Library ( 函 式 庫 ): 由 大 多 數 開 放 原 始 碼 的 函 式 庫 所 組 成, 例 如 : 標 準 的 C 函 式 庫 Libc OpenSSL SQLite 等 等, 還 有 網 頁 函 式 庫 WebKit 負 責 Android 網 頁 瀏 覽 器 的 運 作, 另 外 還 有 2DSGL/3D OpenGL 圖 形 與 多 媒 體 函 式 庫 分 別 支 援 各 種 影 音 與 圖 形 檔 的 播 放, 例 如 :MPEG4, H.264, MP3, AAC, AMR JPG, and PNG 等 多 媒 體 檔 案 格 式 Android Runtime: 提 供 Android 特 有 的 Java 核 心 函 式 庫 與 可 轉 換 Java 執 行 碼 Bytecode 為 Android 專 屬 的 Dalvik Executable(.dex) 檔 案 格 式 的 Dalvik 虛 擬 機 器, 讓 程 式 設 計 師 可 以 透 過 Java 語 言 撰 寫 Android 應 用 程 式, 並 在 Android 平 台 上 同 時 執 行 多 個 Java 應 用 程 式 Linux Kernel ( 系 統 核 心 ): 採 用 Linux Kernel 2.6 版, 負 責 硬 體 的 驅 動 程 式 電 源 管 理 系 統 安 全 記 憶 體 管 理 行 程 管 理 網 路 功 能 (TCP/IP, UDP, WiFi) 檔 案 系 統 (yaffs2, vfat, msdos 等 ) 輸 入 與 輸 出 裝 置 等 等, 以 及 在 軟 體 與 硬 體 之 間 建 立 起 一 個 抽 象 層 (abstraction layer) 溝 通 介 面, 讓 軟 體 與 硬 體 間 可 以 相 互 溝 通 與 運 作 二 系 統 目 錄 架 構 Table 1 Android 系 統 目 錄 架 構 / 子 目 錄 第 二 層 子 目 錄 sqlite_stmt_journals/ cache/ sdcard/ etc/ security/, dhcpcd/, init/ init.goldfish.rc init.rc data/ dalvik-cache/, sys/ app-private/, fs/, devices/, firmware/, system/ power/, bin/, app/, fonts/, proc/ default.prop sbin/ root/ media/, dev/ 5
Android 就 是 Linux 作 業 系 統, 可 以 從 Android 與 Linux 系 統 有 雷 同 的 系 統 目 錄 架 構 這 件 事 情 中 瞭 解 完 整 的 Android 當 案 系 統 架 構 如 Table 1 所 示, 以 下 將 逐 一 介 紹 : sqlite_stmt_journals/ 這 是 Android 系 統 提 供 的 SQLite 資 料 庫 日 誌 資 料 存 放 目 錄, 若 未 使 用 任 何 SQLite 相 關 的 程 式 於 Android 作 業 系 統 上, 則 該 目 錄 為 空 的 cache/ Android 作 業 系 統 運 作 時 的 暫 存 目 錄 sdcard/ Android 手 機 外 插 記 憶 卡 的 目 錄, 或 執 行 Android 模 擬 器 時, 使 用 - sdcard sdcard.img 參 數 的 外 掛 記 憶 卡 目 錄 /etc /etc 是 存 放 Android 作 業 系 統 的 重 要 設 定 檔 目 錄, 但 其 實 它 是 連 結 到 /system/etc, 這 才 是 它 的 真 實 路 徑 /init 與 系 統 啟 動 檔 init.rc 和 init.goldfish.rc /init 是 啟 動 Android 系 統 時 的 初 始 設 定 檔 目 錄, 不 過 因 為 沒 有 root 權 限, 所 以 無 法 進 入 該 目 錄 /data /data 目 錄 是 操 作 Android 系 統 過 程 中 所 產 生 的 資 料, 都 會 放 置 在 子 資 料 目 錄 中, 該 目 錄 底 下 有 一 堆 子 目 錄 分 門 別 類 的 放 置 不 同 資 料 /sys /sys 是 Android 作 業 系 統 運 作 的 系 統 目 錄, 專 門 放 置 Linux Kernel 所 必 頇 處 理 的 功 能 裝 置 /system /system 目 錄 放 置 操 作 Android 作 業 系 統 所 需 的 一 切 工 具, 其 中 最 重 要 的 就 是 bin/ 子 目 錄,Android 系 統 的 所 有 指 令 都 放 置 在 /system/bin 目 錄 中, build.prop 為 Android SDK 的 建 立 設 定 檔,/system/app 目 錄 放 置 系 統 上 的 所 有 APK 套 件, 不 過 以 較 簡 短 名 稱 表 示, 例 如 :com.google.camera.apk 變 成 Camera.apk 另 外 還 有 fonts 目 錄 放 置 系 統 字 型,media 目 錄 放 置 系 統 音 效 檔, 其 音 效 檔 格 式 為 ogg /system/bin 操 作 Android 系 統 時, 相 當 多 的 實 用 指 令 都 放 置 在 /system/bin 目 錄 中, 絕 大 多 數 的 指 令 用 法 語 Linux 系 統 相 同 /system/app /system/app 為 放 置 Android 系 統 應 用 程 式 目 錄, 已 經 預 載 到 Android 桌 面 系 統 的 應 用 程 式 APK 檔 全 部 都 放 置 在 此 目 錄 /system/framework /system/framework 這 個 目 錄 放 置 Android 系 統 的 核 心 函 式 庫, 也 就 是 應 用 6
程 式 架 構 APIs 檔 案 /proc /proc 目 錄 為 Android 系 統 核 心 或 者 說 是 Linux Kernel 所 產 生 的 系 統 運 作 訊 息 的 紀 錄 檔 以 及 行 程 號 碼 default.prop 放 置 在 Android 系 統 根 目 錄 的 default.prop 檔 案, 它 是 adb 除 錯 伺 服 器 的 啟 動 設 定 檔 /sbin /sbin 目 錄 一 般 放 置 與 系 統 操 作 相 關 的 指 令, 在 Android 作 業 系 統 上, 僅 放 置 一 個 adbd(adb daemon), 也 就 是 adb 除 錯 伺 服 器 的 啟 動 指 令 /root /root 目 錄 就 是 root 帳 號 的 家 目 錄 (Home Directory) /dev /dev 目 錄 放 置 Android 系 統 的 所 有 硬 體 裝 置 代 號 三 程 式 設 計 架 構 1. 開 發 程 式 架 構 Android 程 式 設 計 專 案 的 檔 案 架 構, 不 管 是 使 用 Eclipse 產 生 專 案, 或 是 使 用 activitycreator 產 生 一 個 Android 程 式 設 計 專 案, 該 專 案 的 檔 案 結 構 都 類 似 Table 2 的 目 錄 結 構 Table 2 Android 程 式 設 計 專 案 檔 案 結 構 表 專 案 目 錄 Project/ 專 案 子 目 錄 資 源 檔 案 檔 案 用 途 AndroidManifest.xml 應 用 程 式 設 定 檔 src/ *.java Java 原 始 碼 檔 案 res/anim/ *.xml 動 畫 設 定 檔 res/drawable/ *.png, *.jpg, *.gif 應 用 程 式 圖 檔 res/layout main.xml 視 窗 佈 局 檔 res/values arrays.xml colors.xml dimens.xml string.xml styles.xml 陣 列 定 義 檔 繪 圖 顏 色 定 義 檔 尺 寸 定 義 檔 文 字 資 源 檔 樣 式 定 義 檔 res/xml *.xml 程 式 執 行 時 所 需 讀 取 的 XML 檔 案 res/raw *.raw 程 式 執 行 時 所 應 用 的 資 源 檔, 例 如 : 音 效 檔 7
2. 設 計 Android Manifest 應 用 程 式 定 義 檔 Androidmanifest.xml 檔 案 定 義 了 設 計 應 用 程 是 該 有 的 功 能 導 向, 清 楚 描 述 應 用 程 式 主 要 功 能 是 什 麼, 能 處 理 什 麼 樣 的 資 料 以 及 什 麼 時 候 該 執 行 這 些 動 作, 而 這 些 功 能 導 向 由 下 列 四 個 元 素 所 定 義 ( 並 非 每 個 程 式 都 包 含 這 四 大 元 素 ), 並 以 不 同 的 XML 標 籤 名 稱 定 義 在 Androidmanifest.xml 檔 案 中 : Activity ( 活 動 ) 使 用 <Activity> 標 籤 在 Android 手 機 系 統 上,Activity 通 常 就 代 表 一 個 應 用 程 式 的 顯 示 畫 面 例 如 : 顯 示 一 個 Email 通 訊 錄 清 單 畫 面 就 是 一 個 Activity, 而 編 輯 通 訊 錄 畫 面 就 是 另 一 個 Activity Intent 與 Broacast Receiver ( 意 圖 與 廣 播 接 收 ) 使 用 <receiver> 標 籤 在 Android 手 機 上 操 作 任 何 一 個 應 用 程 式 都 有 其 目 的, 例 如 : 使 用 FTP 檔 案 傳 輸 程 式 下 載 或 上 傳 檔 案, 使 用 網 頁 瀏 覽 器 瀏 覽 網 頁, 這 種 資 料 取 得 的 過 程 在 Android 程 式 設 計 中, 就 將 它 稱 為 Intent Receiver( 意 圖 接 收 ) 而 當 設 計 的 應 用 程 式 產 生 Intent 後, 目 的 是 要 接 收 對 方 傳 來 的 資 料, 則 必 頇 產 生 一 個 Broacast Receiver( 廣 播 接 收 ), 來 處 理 接 收 到 的 資 料 Service ( 服 務 功 能 ) 使 用 <Service> 標 籤 當 Android 應 用 程 式 並 不 需 要 顯 示 畫 面, 但 卻 要 長 時 間 在 背 景 執 行 時, 就 是 具 備 Service 服 務 功 能 的 應 用 程 式, 例 如 :MP3 播 放 程 式 Content Provider ( 內 容 提 供 ) 使 用 <Provider> 標 籤 應 用 程 式 所 進 行 的 動 作 是 讓 使 用 者 可 以 儲 存 它 們 的 資 料 或 文 件, 例 如 : 一 個 SQLite 資 料 庫 程 式 就 是 屬 於 Content Provider 功 能 的 程 式 此 外,AndroidManifest.xml 檔 案 中 還 可 以 進 一 步 使 用 <uses-permission> 與 <permission> 標 籤 設 定 應 用 程 式 的 使 用 者 執 行 權 限, 以 及 使 用 <instrumentation> 標 籤 設 定 應 用 程 式 原 始 碼 的 組 成 與 測 詴 功 能 Table 3 AndroidManifest XML 標 籤 語 法 層 級 表 Manifest 應 用 程 式 標 籤 功 能 標 籤 Intent filter intent 標 籤 <manifest> <application> <activity> <intent-filter> <action> <category> <data> <meta-data> <receiver> <service> <provider> <uses-permission> <permission> <instrumentation> 8
3. R.java 資 源 類 別 程 式 碼 的 定 義 在 Android 程 式 編 譯 時, 由 aapt(android Asset Packaging Tool) 工 具 自 動 產 生 一 個 R.java 類 別 檔 案, 定 義 這 個 程 式 包 含 的 所 有 資 源 檔 案, 包 括, 文 字 字 串 使 用 這 介 面 的 佈 局 檔 以 及 所 有 的 圖 檔, 只 要 變 更 任 何 的 資 源 檔 內 容, 這 個 R.java 檔 案 就 會 跟 著 變 動, 並 自 動 產 生 新 的 R.java 資 源 索 引 檔, 裡 面 將 自 動 定 義 開 發 程 式 所 應 納 入 的 所 有 資 源 檔 案, 參 見 Figure 2 範 例 :string 類 別 就 是 文 字 資 源 檔 ; 而 layout 類 別 就 是 佈 局 檔, 最 後 drawable 是 圖 檔 資 源 參 考 文 獻 [2][3] Figure 2 R.java 資 源 類 別 原 始 碼 範 例 4. XML 資 源 檔 案 設 計 文 字 資 源 檔 string.xml 每 一 個 XML 文 件 要 以 <?XML> 標 籤 為 開 頭, 裡 頭 定 義 XML 的 版 本 為 1.0 與 編 碼 方 式 為 utf-8 再 來 使 用 <resources> 宣 告 資 源 檔 的 開 始, 而 在 <resources> 與 </resources> 標 籤 裡 頭, 使 用 <string> 標 籤 宣 告 所 有 的 文 字 字 串 變 數, 參 見 Figure 3 範 例 : string_name 為 文 字 變 數 string_value 為 字 串,string_name 分 別 儲 存 string_value, 且 strings.xml 文 件 允 許 使 用 文 字 風 標 籤 <b> <i> <u> 將 文 字 字 串 格 式 化 為 粗 體 斜 體 或 加 上 底 線 Figure 3 strings.xml 文 字 資 源 檔 範 例 9
文 字 顏 色 設 定 資 源 檔 colors.xml Android 系 統 的 文 字 顏 色 定 義 方 式 採 用 十 六 進 位 法 :#RGB #ARGB #RRGGBB #AARRGGBB 的 顏 色 定 義 格 式 都 可 以 接 受 RGB 是 Red Green Blue 三 原 色,A 是 顏 色 設 定 值 的 alpha 透 明 度 參 數 設 定 值, 可 從 -0255( 十 六 進 位 為 00-FF) 完 整 的 顏 色 設 定 語 法 列 在 Table 4 Table 4 顏 色 設 定 語 法 表 顏 色 語 法 語 法 說 明 範 例 ( 採 16 進 位 顏 色 #RGB 無 Alpha, 8 位 元 表 示 法 法 #00f ) 藍 色 #ARGB 有 Alpha, 8 位 元 表 示 法 #800f 半 透 明 藍 色 #RRGGBB 無 Alpha, 16 位 元 表 示 法 #0000ff 藍 色 #AARRGGBB 有 Alpha, 16 位 元 表 示 法 #800000ff 半 透 明 藍 色 在 colors.xml 顏 色 資 源 檔 中, 設 定 所 需 要 的 顏 色,<color> 標 籤 語 法 如 Figure 4 Figure 4 colors.xml 顏 色 設 定 資 源 檔 範 例 圖 檔 資 源 目 錄 drawable Android 應 用 程 式 的 小 圖 示 程 式 內 部 所 使 用 的 圖 檔 或 背 景 檔 案, 都 要 在 資 源 目 錄 res\drawable 裡 面 目 前 Android 系 統 支 援 圖 檔 格 式 有.png.jpg 與.gif 三 種, 只 要 將 所 需 要 用 到 的 圖 檔 放 至 res\drawable 目 錄 底 下, 然 後 就 可 以 在 Java 原 始 碼 或 其 他 XML 資 源 檔 中 引 用 這 個 圖 檔 資 源 視 窗 佈 局 資 源 檔 layout\main.xml 佈 局 資 源 檔 使 用 <LinearLayout> 佈 局 標 籤 語 法 開 始 定 義 佈 局, 首 先 使 用 xmlns:android 語 法 將 android namespace 定 義 為 android 系 統 的 資 源 連 結 http://schemas.android.com/apk/res/android, 這 樣 才 能 使 用 android 系 統 所 提 供 的 佈 局 屬 性 變 數 在 <LinearLayout> 標 籤 中 有 主 要 三 個 變 數 定 義 : android:orientation= vertical 用 來 定 義 視 窗 為 垂 直 顯 示, horizontal 則 為 水 平 顯 示 ;android:layout_width 與 android:layout_height 代 表 應 用 程 式 的 視 窗 的 寬 度 與 高 度, fill_parent 代 表 寬 度 或 高 度 填 滿 整 個 畫 面,wrap_content 則 代 表 畫 面 高 度 或 寬 度 僅 包 覆 內 容 即 可 所 以 使 用 <LinearLayout> 標 籤 就 完 成 一 個 應 用 程 式 最 主 要 的 佈 局 了 再 來 是 <LinearLayout> 標 籤 中 的 <TextView> 標 籤, 裡 頭 最 後 一 個 屬 性 變 數 android:text, 是 引 用 res\values\string.xml 裡 頭 的 message 10
變 數 內 容 來 顯 示 這 段 文 字, 而 這 就 是 一 個 簡 單 的 佈 局 檔 案 XML 文 件 了 參 見 Figure 5 範 例, 是 一 個 簡 單 的 layout 佈 局 檔 案 XML 原 始 碼 Figure 5 main.xml 佈 局 資 源 檔 範 例 四 程 式 運 作 原 理 1. Android 程 式 運 作 原 理 幾 乎 所 有 的 Android SDK 精 髓 在 Application Framework 中, 可 參 見 Figure 1, 它 提 供 大 量 的 Java 類 別 供 使 用 者 開 發 程 式 當 我 們 在 Eclipse 中 執 行 Run/RunConfigurations 時,Java 程 式 碼 不 會 被 編 譯 成 常 見 的 Java Bytecode, 而 是 被 Eclipse/Ant 編 譯 成 Dalvik Bytecode(*.dex), 然 後 再 和 其 他 資 源 檔 打 包 成 APK 套 件, 最 後 在 Runtime 時, 透 過 Android Code Libraries 這 個 很 大 的 Java 類 別 總 集 JAR(Java ARchive) 檔 案 與 上 層 的 Java 程 式 溝 通, 而 Dalvik 虛 擬 機 器 則 解 讀 dex 檔 案, 與 下 層 使 用 C 語 言 寫 成 的 Linux Library 函 式 庫 溝 通, 然 後 由 最 底 層 的 Linux Kernel 產 生 一 個 行 程 (process) 執 行 該 程 式 2. Activity Life Cycle( 生 命 週 期 ) 每 一 個 Android 應 用 程 式 執 行 中, 對 底 層 的 Linux Kernal 而 言 是 每 一 個 單 獨 的 Process, 但 是 對 Android 系 統 而 言, 因 為 侷 限 於 手 機 畫 面 的 大 小 與 使 用 方 便 性 考 量,Android 使 用 Activity 的 觀 念, 將 這 些 執 行 中 的 應 用 程 式 分 為 五 大 類, 分 別 是 :foreground process( 前 景 模 式 ) visible process ( 可 見 模 式 ) background process ( 背 景 模 式 ) empty process ( 空 白 模 式 ) 與 service process ( 服 務 模 式 ) 系 統 會 依 照 五 大 類 型 判 斷 應 用 程 式 Activity 是 屬 於 哪 一 個 類 型, 給 予 不 同 的 Activity Life Cycle, 運 作 圖 如 Figure 6 11
Figure 6 Activity Life Cycle 運 作 圖 3. Android 應 用 程 式 運 作 模 型 應 用 程 式 運 作 過 程 中, 首 先 將 所 開 發 的 應 用 程 式 打 包 成 android package.apk 應 用 程 式 套 件, 安 裝 到 Android 系 統 後, 將 它 稱 為 Task( 工 作 ), 也 就 是 Application 應 用 程 式 ; 當 應 用 程 是 真 正 在 底 層 的 Linux Kernel 執 行 時, 被 稱 之 為 一 個 Process( 行 程 ); 而 每 一 個 行 程 底 下 允 許 有 一 個 或 多 個 Threads( 線 程 ) 同 時 執 行, 但 是 建 議 所 開 發 的 程 式 保 持 Signal Thread 單 一 線 程 的 設 計 概 念, 應 用 程 式 運 作 模 型 如 Figure 7 所 示 Figure 7 Android 應 用 程 式 運 作 模 型 12
五 軟 硬 體 配 置 情 形 1. 硬 體 安 裝 條 件 硬 體 項 目 作 業 系 統 處 理 器 速 度 Table 5 硬 體 安 裝 基 本 需 求 基 本 需 求 Windows XP 或 Vista Mac OS X 10.4.8 或 之 後 版 本 ( 適 用 x86 架 構 的 Intel Mac) Linux( 1.8GHz 官 以 方 上 於 Ubuntu 6.10 Dapper Drake 上 測 詴 ) 2. 軟 體 安 裝 條 件 記 憶 體 1GB 以 上 (Vista 建 議 2GB 以 上 ) 以 下 軟 體 依 照 安 裝 順 序 列 出 : Table 6 軟 體 安 裝 基 本 需 求 軟 體 名 稱 功 能 說 明 使 用 版 本 Java 開 發 工 具 目 前 Android 應 用 程 式 主 要 使 用 Java 程 式 JDK 6 Update 22 語 言 來 編 寫 Eclipse IDE 一 個 多 用 途 的 開 發 工 具 平 台 Eclipse ADT Android SDK 安 裝 流 程 : 1. 安 裝 JAVA JDK 基 於 Eclipse 的 Android 開 發 工 具 擴 充 套 件 (Android Development Tools plugin) Android 程 式 開 發 套 件, 包 含 Android 手 機 模 擬 器 (Emulator) JDK 預 設 安 裝 目 錄 為 C:\Program Files\Java\jdk1.6.0_14 JRE 預 設 安 裝 目 錄 為 C:\Program Files\Java\jre6 2. 安 裝 Eclipse 13 Helios3.6.1 0.9.1 2.2 SDK r7 Eclipse 不 需 要 安 裝, 只 要 確 認 你 的 系 統 上 有 安 裝 Java, 即 可 直 接 開 啟 Eclipse 資 料 夾, 點 擊 Eclipse 開 始 執 行 Eclipse 整 合 開 發 環 境 3. 安 裝 ADT 擴 充 套 件 (Eclipse 3.4 版 ) 選 擇 Help->Software Updates 選 項 選 擇 Available Software 標 籤, 選 擇 右 方 的 Add Site... ( 新 增 網 站 ) 按 鈕, 選 擇 Local... 並 選 取 Android ADT, 按 下 "OK" 按 鈕 離 開 4. 設 定 Android SDK 打 開 偏 好 設 定 頁 面 (Preference) 選 擇 Android 標 籤, 在 SDK Location 藍 未 按 下 Browse, 選 擇 已 經 解 壓 縮 的 SDK 資 料 夾 所 在 地, 按 下 視 窗 右 下 角 的 Apply 3. 設 定 Andorid 模 擬 器
Android SDK 1.5 以 上 的 版 本 提 供 了 支 援 不 同 版 本 模 擬 器 的 功 能, 在 使 用 模 擬 器 之 前, 必 頇 先 建 立 一 個 模 擬 器 後 才 可 在 Eclipse 開 發 環 境 中 使 用 SDK 中 提 供 了 一 個 android 命 令 行 工 具 ( 在 android_sdk/tools 中 ), 可 以 用 來 建 立 新 專 案 或 是 管 理 模 擬 器 在 此 我 們 使 用 android 命 令 行 工 具 來 新 建 立 一 個 模 擬 器 在 新 的 Android 文 件 中, 一 律 把 Android 模 擬 器 稱 作 Android 虛 擬 機 器 (Android Virtual Device), 簡 寫 為 AVD 以 作 區 別 1. 列 出 模 擬 器 類 型 打 開 命 令 提 示 字 元 ( 開 始 > 執 行 cmd ) 進 入 android_sdk/tools 目 錄 輸 入 以 下 命 令, 螢 幕 上 會 列 出 所 有 支 援 的 模 擬 器 類 型 $ android list targets 在 Linux 或 Mac 環 境 中 要 輸 入 $./android list targets 編 號 (id) 為 1 2 的 分 別 是 Android 1.1 和 1.5 模 擬 器 編 號 (id) 為 3 的 Google APIs, 要 開 發 Google Map 等 Google 專 屬 應 用 程 式 時, 需 先 建 立 這 類 型 的 模 擬 器 2. 建 立 一 個 Android SDK 模 擬 器 在 命 令 行 中 輸 入 以 下 命 令 : $ android create avd --target X --name cupcake android create avd : 建 立 一 個 新 的 模 擬 器 --target X : 使 用 id 為 X 的 模 擬 器 類 型 --name cupcake : 將 模 擬 器 命 名 為 cupcake 3. 列 出 已 建 立 的 模 擬 器 在 命 令 行 中 輸 入 以 下 命 令 : $ android list avd 使 用 android list avd 命 令 看 到 有 輸 出, 即 表 示 已 成 功 建 立 模 擬 器 14
4. 實 機 -HTC Desire 5. Table 7 HTC Desire 規 格 表 項 目 規 格 Figure 8 HTC Desire 作 業 系 Android 2.1 (Éclair) CPU Qualcomm 8250 統 RAM 576 MB ROM 512MB 記 憶 卡 microsd ( 相 容 SD 2.0) 尺 寸 重 119 x 60 x 11.9 mm /135 g 量 螢 幕 320 x 480 pixels 3.2 吋 TFT 相 機 500 萬 像 素 使 用 時 通 話 450 分 鐘 / 待 機 660 小 時 間 電 池 1400 mah 顏 色 黑 叁. 研 究 方 法 與 步 驟 一 建 立 新 的 專 案 開 啟 Eclipse 整 合 環 境 在 螢 幕 上 方 的 選 單 列 上, 選 擇 File > New > Project, 此 時 會 出 現 New Project 對 話 視 窗 點 擊 Android 資 料 夾 下 的 Android Project, 會 開 啟 New Android Project 的 對 話 視 窗 在 New Android Project 的 對 話 視 窗 中, 我 們 選 擇 Create new project in workspace, 在 工 作 區 域 中 建 立 新 專 案 並 可 經 由 取 消 勾 選 Use default location 選 項 來 自 定 儲 存 專 案 的 位 置 Table 8 為 我 們 新 增 Android 專 案 的 設 定 Table 8 Android 專 案 設 定 名 稱 值 Project Name Mobile Package Name com.mobile Activity Name Mobile Application Name mobile 二 地 圖 控 制 1. 設 定 MapView 1.1 申 請 地 圖 開 發 金 鑰 15
Google Map 是 Android 平 台 標 準 功 能 之 一, 使 用 MapView 物 件 類 別 com.google.android.maps.mapview 就 可 以 將 Google Map 嵌 入 Android 應 用 程 式 中 但 是 因 為 授 權 限 制, 在 使 用 MapView 開 發 應 用 程 式 前, 必 頇 先 向 Google 申 請 一 組 經 過 驗 證 的 Google Map API key, 才 能 正 常 在 手 機 上 使 用 Google Map 服 務 (1) 查 詢 debug.keystore 位 置 打 開 Eclipse 開 發 環 境 選 單, 選 擇 Windows > Preferences 選 項, 開 啟 Preferences 選 單, 在 視 窗 左 側 點 選 Andorid > Build 選 項 此 時 右 側 畫 面 中 Default debug keystore 所 填 的 路 徑 就 是 debug.keystore 所 在 的 位 置, 如 圖 Figure 9 Figure 9 debug.keystore 位 置 (2) 取 得 MD5 指 紋 訊 息 開 啟 命 令 提 示 字 元, 使 用 keytool 指 令, 經 由 debug.keystore 檔 案 來 產 生 一 組 MD5 格 式 的 指 紋 (Fingerprint) 訊 息, 作 為 申 請 開 發 金 鑰 時 所 需 的 證 書 (certificates) 取 得 MD5 指 令 如 Figure 10 16
Figure 10 MD5 指 紋 訊 息 MD5 指 紋 訊 息 的 命 令 如 下 : keytool -list -alias androiddebugkey -keystore 檔 案 位 置 -storepass android -keypass android 參 考 文 獻 [4] (3) 驗 證 取 得 API key 開 啟 Google 地 圖 網 頁 申 請 開 發 金 鑰 輸 入 取 得 的 MD5, 得 到 金 鑰 後, 加 入 要 開 發 專 案 的 xml 檔 案 中 參 考 文 獻 [4] 17
1.2 使 用 MapView 設 定 (1) 開 發 Google Map 應 用 時, 在 開 啟 專 案 時 頇 選 擇 GoogleAPIS 參 考 文 獻 [4] (2) Figure 111 選 擇 Google APIs 18
(2) 開 啟 後 可 看 到 使 用 的 lib 會 多 一 個 maps.jar 參 考 文 獻 [4] Figure 122 map.jar (3) 要 在 程 式 中 使 用 MapView, 程 式 必 頇 是 MapActivity, 所 以 在 實 作 主 程 式 時, 必 頇 繼 承 MapActivity(com.google.android.maps.MapView) 參 考 文 獻 [4] 19
1.3 Google Map API 加 入 由 於 Google Map API 必 頇 額 外 加 入, 故 必 頇 手 動 在 AndroidManifest.xml 中 加 入 自 訂 的 函 式 庫, 由 於 Google Map 服 務 需 存 取 網 路, 故 也 要 加 入 使 用 網 路 的 權 限, 修 改 如 下 : 參 考 文 獻 [12] 1.4 透 過 MapView 來 使 用 Google Map 服 務 此 元 件 必 頇 使 用 在 Google 上 註 冊 的 金 鑰, 否 則 Map 將 無 法 顯 示 在 申 請 成 功 後 除 了 得 到 金 鑰 之 外, 網 頁 也 提 供 一 段 xml 代 碼 提 供 使 用 者 使 用 本 範 例 將 此 段 代 碼 放 置 res/layout/main.xml 當 中, 如 下 列 程 式 碼 : 參 考 文 獻 [12] 20
1.5 地 圖 放 大 縮 小 功 能 使 用 ZoomControls 這 個 元 件 例, 加 入 將 地 圖 放 大 及 縮 小 的 功 能, 首 先 修 改 main.xml 的 排 版, 程 式 碼 如 下 : 參 考 文 獻 [12] 1.6 地 圖 上 標 記 地 點 而 要 達 到 此 功 能 要 com.google.android.maps.itemizedoverlay 類 別, 此 類 別 可 讓 使 用 者 在 地 圖 上 放 上 標 誌 有 了 放 置 標 誌 的 功 能 後, 接 下 來 是 要 指 定 放 置 的 位 置, 要 達 到 此 功 能 則 要 com.google.android.maps.geopoint 類 別 來 指 定 經 緯 度, 故 使 用 上 述 兩 個 類 別 中 的 方 法 後, 就 可 以 利 用 經 緯 度 將 自 訂 的 標 誌 放 上 地 圖 參 考 文 獻 [4][12] 21
參 考 文 獻 [4][12] 2. 檢 視 地 圖 類 型 MapView 類 別 (map) 的 方 法 可 控 制 地 圖 的 檢 視 模 式, 有 衛 星 圖 一 般 地 圖 以 及 街 道 圖, 目 前 街 道 圖 台 灣 還 未 提 供 參 見 Table 9 Table 9 地 圖 檢 視 模 式 模 式 程 式 碼 衛 星 圖 map.setsatellite(true) 一 般 地 圖 map.settraffic(true) 街 道 圖 ( 台 灣 還 未 提 供 ) map.setstreetview(true) 3. 縮 放 尺 度 MapController 類 別 (mc) 的 setzoom 方 法 可 以 控 制 地 圖 的 縮 放 尺 度 由 全 球 地 圖 (1) 到 街 道 地 圖 (21), 數 值 越 大, 地 圖 就 越 詳 細 但 是 每 個 地 區 可 以 顯 示 的 詳 細 程 度 不 同, 例 如 台 灣 還 沒 有 街 道 圖, 所 以 無 法 放 大 到 最 大 的 倍 率 22
三 QrCode QR 碼 呈 正 方 形, 只 有 黑 白 兩 色 在 3 個 角 落, 印 有 較 小, 像 回 字 的 的 正 方 圖 案 這 3 個 是 幫 助 解 碼 軟 件 定 位 的 圖 案, 使 用 者 不 需 要 對 準, 無 論 以 任 何 角 度 掃 描, 資 料 仍 可 正 確 被 讀 取 日 本 QR 碼 的 標 準 JIS X 0510 在 1999 年 1 月 發 佈, 而 其 對 應 的 ISO 國 際 標 準 ISO/IEC18004, 則 在 2000 年 6 月 獲 得 批 准 根 據 Denso Wave 公 司 的 網 站 資 料,QR 碼 是 屬 於 開 放 式 的 標 準,QR 碼 的 規 格 公 開, 而 由 Denso Wave 公 司 持 有 的 專 利 權 益, 則 不 會 被 執 行 除 了 標 準 的 QR 碼 之 外, 也 存 在 一 種 稱 為 微 型 QR 碼 的 格 式, 是 QR 碼 標 準 的 縮 小 版 本, 主 要 是 為 了 無 法 處 理 較 大 型 掃 描 的 應 用 而 設 計 微 型 QR 碼 同 樣 有 多 種 標 準, 最 高 可 儲 存 35 個 字 元 儲 存 數 字 字 母 二 進 位 數 (8 bit) 日 文 漢 字 / 片 假 名 中 文 漢 字 中 文 漢 字 Table 10 QR 碼 資 料 容 量 QR 碼 資 料 容 量 最 多 7089 字 元 最 多 4296 字 元 最 多 2953 位 元 組 最 多 1817 字 元 ( 採 用 shift JIS) 最 多 984 字 元 ( 採 用 UTF-8) 最 多 1,800 字 元 ( 採 用 BIG5) QR 碼 的 主 要 應 用 的 項 目 可 分 成 四 類 : 1. 自 動 化 文 字 傳 輸 : 通 常 應 用 在 文 字 的 傳 輸, 利 用 快 速 方 便 的 模 式, 讓 人 可 以 輕 鬆 輸 入 如 地 址 電 話 號 碼 行 事 曆 等, 進 行 名 片 行 程 資 料 等 的 快 速 交 換 2. 數 位 內 容 下 載 : 通 常 應 用 在 電 信 公 司 遊 戲 及 影 音 的 下 載, 在 帳 單 中 列 印 相 關 的 QR 碼 資 訊 供 消 費 者 下 載, 消 費 者 透 過 QR 碼 的 解 碼, 就 能 輕 易 連 線 到 下 載 的 網 頁, 下 載 需 要 的 數 位 內 容 3. 網 址 快 速 連 結 : 以 提 供 使 用 者 進 行 網 址 快 速 連 結 電 話 快 速 撥 號 等 4. 身 分 鑑 別 與 商 務 交 易 : 許 多 公 司 現 在 正 在 推 行 QR 碼 防 偽 機 制, 利 用 商 品 提 供 的 QR 碼 連 結 至 交 易 網 站, 付 款 完 成 後 系 統 發 回 QR 碼 當 成 購 買 身 份 鑑 別, 應 用 於 購 買 票 卷 販 賣 機 等 在 消 費 者 端, 也 開 始 有 企 業 提 供 了 商 品 品 牌 確 認 的 服 務, 透 過 QR 碼 連 結 至 統 一 驗 證 中 心, 去 核 對 商 品 資 料 是 否 正 確, 並 提 供 生 產 履 歷 供 消 費 者 查 詢, 消 費 者 能 夠 更 明 白 商 品 的 資 訊, 除 了 能 夠 杜 絕 仿 冒 品, 對 消 費 者 的 購 物 更 是 多 了 一 層 保 護 23
靜 態 QrCodeScanner 1. 下 載 解 碼 的 函 式 庫 http://sourceforge.jp/prohect/qrcode, 接 著 將 檔 名 修 改 為 SourceForgeQRCode.jar, 並 匯 入 開 發 專 案 中 Figure 133 解 碼 函 式 庫 2. 程 式 流 程 與 程 式 碼 Step 1: 開 啟 相 機 及 預 覽 二 維 條 碼 參 考 文 獻 [4][12] Step 2: 設 計 瞄 準 框, 讓 user 對 準 條 碼 參 考 文 獻 [4][12] 24
Step 3: 按 下 拍 照 按 鈕, 取 得 靜 態 圖 片 參 考 文 獻 [4][12] Step 4: 將 靜 態 圖 片 送 往 SourceForgeQRCode 的 函 數 執 行 解 碼, 並 得 到 字 串 實 驗 結 果 截 圖 如 下 Figure 144 靜 態 QR 截 圖 25
動 態 QrCodeScanner 方 法 一 1. 下 載 apk http://code.google.com/p/zxing/downloads/detail?name=zxing-1.6.zip&can=2 &q=barcodescanner3.5.apk 參 考 文 獻 [15] 2. 打 開 adb 模 擬 器 安 裝 BarcodeScanner3.5.apk 參 考 文 獻 [] 3. 撰 寫 程 式 碼 參 考 文 獻 [12] 呼 叫 intent 的 方 法 呼 叫 掃 描 器, 在 將 intent.putextra 設 入 掃 描 的 類 型 進 去, 最 後 startactivtyforresult(intent,o) 開 啟 掃 描 器 參 考 文 獻 [12] 之 後 在 撰 寫 得 到 掃 描 後 結 果,contents 為 得 到 回 傳 的 結 果,format 是 條 碼 類 型 實 驗 結 果 截 圖 如 下 26
Figure 155 動 態 QR 截 圖 四 android 資 料 庫 SQLite 製 作 與 讀 取 1. 先 在 開 發 軟 體 eclipse 連 結 模 擬 器 adb 2. 開 啟 命 令 提 示 字 元 按 照 安 裝 sdk 的 目 錄 下 接 著 輸 入 cd 你 安 裝 的 路 徑 /android-sdk-windows/tools 接 著 輸 入 c:\android-sdk-windows/tools> adb shell 連 接 模 擬 器 27
在 這 畫 面 後 接 著 輸 入 cd data/data 在 這 畫 面 後 接 著 輸 入 cd/com.moblie( 你 檔 案 套 件 所 命 名 的 名 稱 ) 輸 入 cd database 找 尋 建 立 起 的 db 輸 入 sqlite3.db 即 進 入 資 料 庫 中 3. 建 入 資 料 並 下 指 令 查 詢 28
五 Android 透 過 php 與 資 料 庫 連 結 Figure 166 android 連 結 php 資 料 庫 1.Java 檔 案 要 求 php 反 應 的 程 式 碼 撰 寫 如 下 使 用 arraylist 儲 放 資 料 為 對 應 到 php 要 求 伺 服 器 回 傳 資 料 的 變 數 名 稱 參 考 文 獻 [12] 參 考 文 獻 [12] 使 用 HttpPost 的 方 法 將 namevaluepairs 傳 送 到 php 的 程 式 碼 裡 頭 2.Php 檔 案 要 求 伺 服 器 回 傳 資 料 庫 資 料 程 式 碼 撰 寫 如 下 java 檔 案 裡 頭 databases 傳 到 $_REQUEST["database"] 裡 頭 29
mysql_select_db($_request["database"]) 接 著 下 程 式 碼 指 令 要 求 伺 服 器 拿 資 料 庫 資 料 出 來 $query=mysql_query("select i_name,i_price FROM item WHERE i_name LIKE '%".$_REQUEST["column"]."%'"); 參 考 文 獻 [12] 3.Php 抓 取 伺 服 器 回 應 並 印 出 資 料 參 考 文 獻 [12] 在 透 過 json 的 方 法 將 資 料 抓 取 下 來,print 資 料 在 網 頁 上 面, 圖 中 擷 取 第 4 筆 資 料, 但 s_title 為 中 文 字 會 被 json 編 碼 成 utf-8 出 來, 所 以 在 android 抓 取 資 料 前, 必 頇 在 解 碼 回 來 4.android 抓 取 php 網 頁 中 的 資 料 參 考 文 獻 [12] 透 過 iso-8859-1 將 中 文 字 的 亂 碼 解 析 回 原 來 的 中 文, 而 最 後 將 資 料 庫 提 取 出 來 的 結 果 回 傳 到 result 變 數 裡 頭 5. 實 驗 結 果 如 下 30
取 回 php 網 頁 上 資 料, 並 將 資 料 抓 取 下 來 Figure 177 PHP 網 頁 資 料 截 圖 31
六 語 音 辨 識 手 機 透 過 麥 克 風 接 收 你 的 語 音, 然 後 很 快 地 把 語 音 資 料 壓 縮 並 上 傳 到 Google Voice Search 的 伺 服 器, 接 著 要 快 速 進 行 一 連 串 複 雜 的 運 算, 包 括 濾 除 背 景 噪 音, 取 出 語 音 的 部 分, 然 後 拆 解 成 一 個 個 單 詞, 再 送 到 語 音 資 料 庫 進 行 比 對, 找 出 正 確 對 應 的 搜 尋 關 鍵 字, 然 後 再 送 出 搜 尋 結 果 到 你 的 手 機 以 下 是 程 式 碼 : 將 辨 識 的 資 料 取 出 來 參 考 文 獻 [1][7] 32
以 下 是 將 截 取 到 的 語 音 字 串 送 到 google Voice search 伺 服 引 擎 進 行 搜 尋, 並 回 送 資 料 到 手 機 上 參 考 文 獻 [7][9] 33
肆. 實 驗 結 果 與 展 示 一 流 程 圖 Figure 18 功 能 流 程 圖 34
參 考 文 獻 [4] 主 要 程 式 檔 解 說 程 式 說 明 Mobile.java 利 用 gps 和 掃 描 功 能 找 尋 附 近 商 家 並 連 進 資 料 頁 面 Welcome.jave 根 據 切 換 的 模 式 不 同, 切 換 不 同 的 頁 面 SearchStore.java 列 出 商 場 內 所 有 正 在 進 行 活 動 的 消 息 SearchView.java 列 出 景 點 內 所 有 商 家 的 資 料 GoogleMap.java 用 來 查 詢 景 點 及 商 家 的 位 置 MapOverlay.java 自 訂 在 地 圖 上 放 置 圖 檔 的 Overlay 類 別, 可 讓 程 式 傳 入 Drawable ID 與 GeoPoint 在 MapView 上 顯 示 圖 檔 Overlay Map.java 用 來 標 示 store 模 式 頁 面 下 商 品 的 位 置 RecordDb.java 程 式 為 android 內 建 資 料 庫, 用 來 存 放 程 式 需 要 存 放 的 資 料 Table 11 程 式 檔 說 明 二 實 驗 展 示 結 果 主 頁 面 查 詢 附 近 商 家 與 景 點 Figure 19 主 頁 面 透 過 與 資 料 庫 查 詢 列 出 附 近 商 家 與 景 點 ( 圖 中 以 東 海 量 販 店 及 東 海 別 墅 商 圈 為 例 ) 35
Figure 20 搜 尋 頁 面 1. 以 東 海 別 墅 景 點 為 例 進 入 歡 迎 頁 面 列 出 這 附 近 的 景 點 以 及 熱 門 商 家 Figure 21 景 點 頁 面 點 選 商 家 選 項, 列 出 與 東 海 商 圈 店 家 相 關 資 料 36
Figure 22 商 店 資 料 下 圖 是 以 點 選 路 思 義 教 堂 景 點 為 例, 標 示 在 地 圖 上 Figure 23 標 示 景 點 地 圖 37
2. 以 商 場 為 例 Figure 24 商 場 例 子 Figure 25 搜 尋 物 品 功 能 搜 尋 物 品 功 能 商 店 可 以 選 擇 語 音 查 詢 或 手 寫 查 詢 38
Figure 26 搜 尋 資 料 庫 物 品 資 料 圖 中 以 輸 入 L 與 資 料 庫 互 動 查 詢 到 L 升 特 級 精 鹽 及 特 級 砂 糖 ( 語 音 查 詢 必 頇 實 機 ) Figure 27 物 品 資 料 顯 示 物 品 透 過 掃 描 後 得 到 物 品 價 格, 及 計 算 總 價 39
Figure 28 掃 描 物 品 條 碼 掃 描 價 格 畫 面 伍 結 論 與 未 來 展 望 我 們 此 次 專 題 應 用 運 用 多 種 android 平 台 上 最 主 要 開 發 應 用, 例 如 : 語 音 辨 識 Qr 碼 的 開 發 及 應 用 googlemap 的 開 發 實 作, 來 結 合 我 們 專 題 的 想 法, 而 透 過 這 幾 種 功 能, 我 們 將 其 應 用 在 我 們 出 去 外 面 旅 行, 或 者 是 想 遊 玩 更 方 便 省 時 的 使 用 者, 可 以 快 速 搜 尋 想 要 找 尋 的 目 標 然 後 節 省 時 間 在 享 受 與 家 人 互 動 的 時 光, 或 者 是 旅 行 的 人 們 可 以 省 下 更 多 找 尋 景 點 及 飲 食 的 店 家 在 哪 裡 的 時 間, 可 以 擁 有 更 多 剩 餘 的 時 間 好 好 安 排 接 下 來 行 程 而 此 次 的 專 題 研 究 讓 我 們 不 僅 接 觸 到 android 平 台 強 大 的 功 能 性 外, 還 學 習 到 接 觸 不 同 種 的 程 式 語 言 的 結 合 運 用, 才 有 可 能 實 現 專 題 的 想 法, 例 如 : 透 過 在 檔 案 java 下 指 令 到 php 來 取 得 資 料 庫 的 資 料, 之 後 在 php 上 解 析 資 料 40
在 傳 回 java 檔 案 上 取 得 資 料 庫 資 料, 這 些 過 程 讓 我 們 體 驗 到 程 式 語 言 的 不 同 使 用 外, 也 讓 我 們 學 習 結 合 不 同 程 式 語 言 的 應 用 未 來 展 望 是 能 功 能 性 的 再 完 整, 希 望 在 加 入 查 詢 或 追 蹤 公 車 時 間 的 系 統 進 來, 這 樣 就 能 更 能 使 用 者 使 用 起 來 更 方 便, 或 者 是 地 圖 標 誌 的 功 能 增 進, 希 望 能 加 入 社 群 網 站 的 概 念, 能 在 地 圖 做 自 己 的 旅 遊 地 圖 然 後 在 分 享 給 朋 友 觀 看 使 用 分 享 41
陸 參 考 文 獻 與 網 站 [1] AndroidDevelopers,<http://developer.android.com/intl/zh-CN/index. html > [2] Developer Resources for Java Technology,< http://java.sun.com/ > [3] Eclipse.org home,< http://www.eclipse.org/ > [4] AndroidMapsAPI-GoogleCode,<http://code.google.com/intl/zh-TW/andr oid/maps-api-signup.html > [5] Google Android Emulator Skins,< http://www.android.encke.net/ > [6] OpenHandsetAlliance<http://www.openhandsetalliance.com/index.htm> [7] Android Market,< http://www.android.com/market/> [8] HTC Magic, < http://www.htc.com/www/product/magic/overview.html > [9] MyGeoPosition.com, < http://www.mygeoposition.com/ > [10] Gasolin, Google!Android 手 機 應 用 程 式 設 計 入 門, 文 魁, 2009. [11] 楊 文 誌, Google Android 程 式 設 計 與 應 用, 旗 標, 2009. [12] 佘 志 龍, 陳 昱 勛, 鄭 名 傑, 陳 小 鳳, 郭 秩 均, Google Android SDK 開 發 範 例 大 全, 悅 知 文 化, 2009. [13] DiveIntoAndroid androidbmi, <http://code.google.com/p/androidbmi/wiki/diveintoandroid > [14] Android 中 文 資 源 站, < http://android.cool3c.com/ > [15]Zxing <http://code.google.com/p/zxing/downloads/detail?name=zxing-1.6.zip& can=2&q=barcodescanner3.5.apk > 42
[15] 柒 附 錄 關 於 KML 值 傳 統 上 常 見 的 地 圖 座 標 表 示 法, 是 把 整 個 橢 圓 形 的 地 球 表 面, 由 北 極 到 南 極, 等 份 畫 上 一 個 個 南 北 向 的 圓 圈 表 示 表 示 所 在 地 南 北 方 向 的 緯 度 (latitude) 再 將 南 北 極 連 接 成 一 條 一 條 的 線, 以 通 過 英 國 格 林 威 治 天 文 台 所 在 地 的 線 為 0 度 線 ( 東 經 西 經 各 180 度 ), 來 表 示 所 在 地 東 西 方 向 的 經 度 (longitude) 參 考 文 獻 [9] 一 取 得 KML 值 KML(Keyhole Makeup Language) 是 Google 地 圖 和 Google Earth 所 使 用 的 座 標 格 式, 在 我 們 程 式 中 的 圖 標 層 的 座 標 皆 是 以 KML 來 定 義, 其 數 據 為 使 用 mygeoposition 網 站, 輸 入 位 置 後 反 查 KML 值 得 之, 參 見 Figure 35 網 址 :< http://www.mygeoposition.com/> Figure 29 透 過 MyGeoPosition.com 網 站 取 得 東 海 大 學 的 KML 值 二 使 用 KML 值 查 詢 地 圖 我 們 提 供 的 應 用 程 式 可 以 將 現 在 位 置 的 經 緯 度 以 簡 訊 及 E-mail 發 送 手 機 方 面, 在 搜 尋 中 設 置 了 以 經 緯 度 的 方 式 查 詢 位 置 此 外, 也 可 在 網 頁 版 的 Google 地 圖 中 查 詢 首 先, 要 先 將 已 發 布 的 小 工 具 台 灣 地 圖 圖 號 查 詢 系 統 新 增 至 地 圖, 如 Figure 36 43
網 址 :< http://ediyacoo.googlepages.com/querymap.htm> Figure 30 台 灣 地 圖 圖 號 查 詢 系 統 新 增 至 地 圖 後, 返 回 Google 地 圖 將 簡 訊 或 E-mail 所 得 到 的 KML 值 分 別 輸 入 經 度 緯 度 即 可 查 詢 到 地 圖 的 位 置 了, 參 見 Figure 37 Figure 31 輸 入 KML 值 得 到 地 圖 資 料 44