Microsoft Word - AEL Part08

Size: px
Start display at page:

Download "Microsoft Word - AEL Part08"

Transcription

1 推薦序 黃文良教授 中央研究院資訊科學研究所 近年來由於 3G 網路普及, 硬體運算效能提升, 再加上各式應用軟體的靈活便利性, 智慧型手機漸漸取代傳統行動電話融入日常生活, 包括電子郵件 網頁瀏覽 影音播放 地圖查詢 拍照攝影, 各種功能隨手呈現即時互動帶來無比方便彈性 這種普遍需求現象也反映在許多手機品牌的亮麗銷售數據上 我們可以預期在通訊成本持續降低, 雲端運算逐步成熟, 網路早已無所不至的時代, 通過不斷發表優異產品, 增進各項周邊機能, 以及提出更多元型態的應用服務, 智慧型手機終將成為數位生活不可或缺的重要幫手 Android 平台基於 Linux 開放核心架構, 對於硬體設計製造充滿彈性, 容易區隔銷售對象自行規劃產品, 自從 2007 年底正式公布以來深受各家手機製造商支持, 結合最新處理器與周邊元件, 不斷推出各種智慧型手機, 並且依照功能與價格提供消費者多樣化的選擇 在應用上,Android 平台充分發揮新型處理器運算效能, 呈現高品質圖形與音效, 更直接具備各式 Google 服務, 包括網頁瀏覽搜尋 地圖定位 語音處理等等 Google Play 線上軟體商店提供了無數程式 : 軟體工具 商務應用 遊戲 電子書 新聞氣象 交通旅遊..., 供使用者直接以手機分類瀏覽 檢索 線上購買 下載安裝或更新, 不斷延伸手機功能 按照現行發展趨勢,Android 手機應用將會更多元化 更豐富, 並且具備更完整的商務應用支援 如果說智慧型手機的出現重新定義了行動通訊, 那麼在此時此刻與即將來臨的年代, 各式應用軟體功能所提供服務品質的深度與廣度, 也將重新書寫手機平台的價值 有別於早期異質平台開發經驗,Android 應用程式開發資源取得方式十分簡單, 相關工具皆可在網站上自由下載, 並且輕易適用於 Windows MAC Linux 作業系統 這種配置便利性簡化了軟體系統開發成本, 對於學習者而言更是友善親切 此外,Android 架構在先天規劃上區隔了作業系統核心與應用介面層, 開發者使用 Java 語言專注於應用程式本身的設計編寫, 再透過標準架構類別函式呼叫與系統互動, 這種方式不但降低設計與除錯複雜度, 也免除許多非必要的工程負擔 從開發工具的取得, 到最後應用 ii

2 成果的發布方式, 其中開放與標準化架構的精神, 更使我們的設計研發無須受限於單一品牌廠商與特定商品, 就數位文明歷史來看, 這應該也是應用領域長期發展持續繁榮的重要基礎 在實務上, 無論是初學者或專業設計師, 備妥合適的參考工具將使我們事半功倍, 雖然我們可透過網路找到豐富而開放的線上原始碼範例或各討論區的技術解決方案, 一本精心規劃妥善編排的參考書所帶來的即時助益仍是無可取代的 本書作者孫宏明老師具有長期教學與實務設計經驗, 熟悉各種電腦語言 程式設計 影像處理 電腦圖學 電腦視覺 電腦遊戲設計等領域, 指導學生參加大專程式設計競賽取得豐碩成果 本書編排方式由淺入深循序漸進, 將相關知識與技巧詳細解說呈現, 搭配各種實例練習, 又可透過章節主題直接尋找特定解決方案, 巧妙涵蓋學習與實務不同層次需求, 相信能為讀者帶來有效的幫助, 輕鬆提升程式開發技藝, 解決各種疑難狀況 iii

3 當 Android 系統發生某種狀況, 必須通知所有 App 時, 例如電池電量不足 收到來電 等, 就會利用 Broadcast Intent 物件的功能進行訊息廣播 Broadcast Intent 的運作機制包含二個部分, 一個是送出 Intent 物件的程式, 另一個是監聽廣播訊息的接收端 ( 稱為 Broadcast Receiver) Broadcast Receiver 是一個繼承 BroadcastReceiver 的類別,App 必須向 Android 系統註冊成為 Broadcast Receiver, 並指定要監聽的廣播訊息 當監聽的廣播訊息被某個 App, 或是由 Android 系統送出時,Android 系統會啟動所有監聽該廣播訊息的 Broadcast Receiver 程式, 並執行它們的 onreceive() 方法 Broadcast Receiver 程式只有在 Android 系統執行它的 onreceive() 方法時才會處於有效狀態, 一旦 onreceive() 方法執行完畢, 就有可能被移除, 直到下次監聽的訊息再度出現, 才會重新執行一次, 這個特性會影響到 onreceive() 方法中執行的工作 例如在 onreceive() 方法中啟動一個 thread 執行某一項比較耗時的工作時, 由於 onreceive() 方法執行結束,Broadcast Receiver 程式被系統移除 這時候 Broadcast Receiver 程式所啟動的 thread 也會被 Android 系統強制清除, 因此類似這種非同步的工作並不適合在 onreceive() 方法中執行 43-1 App 廣播 Intent 物件的方法 程式要廣播 Intent 物件時需要完成以下三個步驟 : 建立一個 Intent 物件, 並指定要廣播的訊息 廣播的訊息其實就是一個字串, 每一個程式都可以建立自己的廣播訊息 為了避免不同的程式誤用相同的廣播訊息, 一般建議採用類似程式套件路徑的方式來命名, 如以下範例 : 357

4 Intent it = new Intent("com.android.MY_BROADCAST"); 如果要在訊息中附帶資料, 可以把資料放入 Intent 物件中 : it.putextra("string_data", " 訊息附帶的資料 "); 也可以先把資料儲存在 Bundle 物件, 再將 Bundle 物件存入 Intent 物 件中 : Bundle bundle = new Bundle(); bundle.putstring("string_data", " 訊息附帶的資料 "); it.putextras(bundle); 呼叫 sendbroadcast() 方法廣播 Intent 物件 sendbroadcast(it); 43-2 建立 Broadcast Receiver 監聽廣播訊息 前面我們已經解釋過 Broadcast Receiver 的運作機制, 以下我們直接介紹它的實作步驟 : 在程式專案中新增一個繼承 BroadcastReceiver 類別的新類別, 我們可以把這個新類別取名為 MyBroadcastReceiver 在這個類別中需要實作 onreceive() 方法, 當監聽的廣播訊息出現的時候, 這個方法會被 Android 系統啟動執行, 請讀者參考以下範例, 這個範例只是從接收到的 Intent 物件中取出資料 注意其中的 Intent 物件是 onreceive() 方法的引數, 並不是呼叫 getintent() 方法取得 public class MyBroadcastReceiver extends BroadcastReceiver { public void onreceive(context context, Intent intent) { // 收到監聽訊息時要執行的程式碼 String sender = intent.getextras().getstring("string_data"); 358

5 在主程式中向 Android 系統註冊步驟 1 建立的 Broadcast Receiver, 以及要監聽的廣播訊息 註冊的方法有二種, 第一種是在 App 的程式功能描述檔 AndroidManifest.xml 中描述這個 Broadcast Receiver, 這樣就完成註冊的動作, 請讀者參考以下範例 : <?xml > <manifest > <application > <activity android:name="com.android.mainactivity"... </activity> <receiver android:name=".mybroadcastreceiver" android:label="@string/app_name"> <intent-filter> <action android:name="com.android.my_broadcast" /> </intent-filter> </receiver> </application> </manifest> 第二種方法是在程式碼中完成註冊, 這種方法還可以把已經註冊過的 Broadcast Receiver 取消, 以下先看註冊的程式碼 : IntentFilter itfilter = new IntentFilter("com.android.MY_BROADCAST"); MyBroadcastReceiver broadcastreceiver = new MyBroadcastReceiver(); registerreceiver(broadcastreceiver, itfilter); 如果要取消已經註冊的 Broadcast Receiver, 則執行以下程式碼 : unregisterreceiver(broadcastreceiver); 只有使用第二種方式註冊的 Broadcast Receiver 才可以取消 讀者可以對照以上二種註冊的方法, 不管使用哪一種方法, 在註冊時都必須提供二項資訊, 第一是監聽的廣播訊息, 第二是 Broadcast Receiver 物件 以上就是廣播 Intent 和建立 Broadcast Receiver 的方法, 接下來我們用一個 App 專案來示範完整的實作 359

6 43-3 範例程式 這個範例程式的執行畫面如圖 43-1, 程式中會建立 2 個 Broadcast Receiver 監聽不同的廣播訊息 第一個 Broadcast Receiver( 以下稱為 BroadcastReceiver1) 是利用 AndroidManifest.xml 檔案進行註冊, 第二個 Broadcast Receiver( 以下稱為 BroadcastReceiver2) 是利用程式碼進行註冊 程式執行畫面的第一個按鈕就是註冊 BroadcastReceiver2, 第二個按鈕則是取消 BroadcastReceiver2 的註冊 圖 43-1 Broadcast Intent 和 Broadcast Receiver 範例程式的執行畫面 程式剛開始執行的時候, 按下 傳送 MY_BROADCAST1 按鈕時, 螢幕上會出現一個 Toast 訊息, 通知 BroadcastReceiver1 已經收到廣播訊息, 如圖 43-2 如果按下 傳送 MY_BROADCAST2 按鈕則沒有任何結果, 因為這時候還沒有註冊 BroadcastReceiver2 請讀者按下 註冊 BroadcastReceiver2 按鈕, 然後再按一次 傳送 MY_BROADCAST2 按鈕, 此時就會出現一個 Toast 訊息, 通知 BroadcastReceiver2 已經收到廣播訊息, 如圖 43-3 如果讀者按下 註銷 BroadcastReceiver2 按鈕, 然後再測試一次, 會發現 BroadcastReceiver2 又收不到廣播訊息 以下是完整的介面佈局檔 主程式檔和二個 Broadcast Receiver 類別的程式檔, 這些程式碼的主要內容都已經在前面討論過, 因此請讀者自行參閱 360

7 圖 43-2 BroadcastReceiver1 收到廣播訊息的畫面 圖 43-3 BroadcastReceiver2 收到廣播訊息的畫面 介面佈局檔 : <LinearLayout xmlns:android=" xmlns:tools=" android:id="@+id/linearlayout1" 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=".mainactivity" > <Button android:id="@+id/btnregreceiver" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 註冊 Broadcast Receiver2" android:layout_margintop="20dp" /> <Button android:id="@+id/btnunregreceiver" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 註銷 Broadcast Receiver2" /> <Button android:id="@+id/btnsendbroadcast1" android:layout_width="match_parent" 361

8 android:layout_height="wrap_content" android:text=" 傳送 MY_BROADCAST1" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 傳送 MY_BROADCAST2" /> </LinearLayout> 主程式檔 : public class MainActivity extends Activity { private Button mbtnregreceiver, mbtnunregreceiver, mbtnsendbroadcast1, mbtnsendbroadcast2; private MyBroadcastReceiver2 mmyreceiver2; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mbtnregreceiver = (Button)findViewById(R.id.btnRegReceiver); mbtnunregreceiver = (Button)findViewById(R.id.btnUnregReceiver); mbtnsendbroadcast1 = (Button)findViewById(R.id.btnSendBroadcast1); mbtnsendbroadcast2 = (Button)findViewById(R.id.btnSendBroadcast2); mbtnregreceiver.setonclicklistener(btnregreceiveronclick); mbtnunregreceiver.setonclicklistener(btnunregreceiveronclick); mbtnsendbroadcast1.setonclicklistener(btnsendbroadcast1onclick); mbtnsendbroadcast2.setonclicklistener(btnsendbroadcast2onclick); public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; private View.OnClickListener btnregreceiveronclick = new View.OnClickListener() { public void onclick(view v) { IntentFilter itfilter = 362

9 ; new IntentFilter("com.android.MY_BROADCAST2"); mmyreceiver2 = new MyBroadcastReceiver2(); registerreceiver(mmyreceiver2, itfilter); private View.OnClickListener btnunregreceiveronclick = new View.OnClickListener() { public void onclick(view v) { unregisterreceiver(mmyreceiver2); ; private View.OnClickListener btnsendbroadcast1onclick = new View.OnClickListener() { public void onclick(view v) { Intent it = new Intent("com.android.MY_BROADCAST1"); it.putextra("sender_name", " 主程式 "); sendbroadcast(it); ; private View.OnClickListener btnsendbroadcast2onclick = new View.OnClickListener() { public void onclick(view v) { Intent it = new Intent("com.android.MY_BROADCAST2"); it.putextra("sender_name", " 主程式 "); sendbroadcast(it); ; MyBroadcastReceiver1 類別 : public class MyBroadcastReceiver1 extends BroadcastReceiver { public void onreceive(context context, Intent intent) { String sender = intent.getstringextra("sender_name"); Toast.makeText(context, "BroadcastReceiver1 收到 " + sender + " 發送的 Broadcast 訊息 ", Toast.LENGTH_LONG).show(); 363

10 MyBroadcastReceiver2 類別 : public class MyBroadcastReceiver2 extends BroadcastReceiver { public void onreceive(context context, Intent intent) { String sender = intent.getstringextra("sender_name"); Toast.makeText(context, "BroadcastReceiver2 收到 " + sender + " 發送的 Broadcast 訊息 ", Toast.LENGTH_LONG).show(); 程式功能描述檔 AndroidManifest.xml: <?xml > <manifest > <application... > <activity android:name="com.android.mainactivity"... </activity> <receiver android:name=".mybroadcastreceiver1" android:label="@string/app_name"> <intent-filter> <action android:name="com.android.my_broadcast1" /> </intent-filter> </receiver> </application> </manifest> 364

11 如果程式需要執行一項比較費時的工作, 為了避免讓系統進入停滯狀態, 無法即時回應使用者的操作, 此時應該使用 multi-thread 程式架構, 而 Service 物件就是 multi-thread 技術的一種實作 Service 會和啟動它的主控程式一起執行, 例如我們可以利用 Service 物件, 讓手機或平板電腦一邊播放音樂, 一邊讓使用者繼續操作其它功能, 像是上網或是瀏覽照片 Service 和 Activity 一樣也是一個類別, 它們都是 Android 系統中的執行單元 只是 Activity 會有一個介面佈局檔當成它的操作畫面, 但是 Service 沒有操作畫面, 它的工作就是負責執行一項特定的任務, 直到完成為止, 或是被它的主控程式下令停止 Service 和 Thread Service 和 Thread 的功能很相似, 它們都是可以獨自執行的物件, 而且都是在背景執行, 沒有畫面, 那麼二者之間有何分別呢? Service 雖然是在背景執行, 可是它預設是在程式的 main thread( 也稱為 UI thread) 裡頭執行, 也就是說它會佔用主程式執行的時間, 因此可能會影響程式操作的流暢性 如果是換成另外建立 thread, 這個背景執行的 thread 就叫做 background thread 或是 worker thread, 由於它和主程式是分開執行, 所以不會影響程式操作的流暢性 44-1 Service 的執行方式和生命週期 由於 Service 是根據 Android 系統的特性和架構所設計的新類別, 自然會用到 Android 系統特有的架構, 那就是 Intent 要啟動 Service 有二種方法, 一種是呼叫 startservice(), 另一種則是呼叫 bindservice() 不管是哪 365

12 一種方法, 主程式都必須利用 Intent 物件告訴 Android 系統要執行哪一個 Service Service 物件從啟動到結束的執行過程中, 會經歷不同的狀態變化 ( 其實 Activity 也有類似的狀態轉變過程, 我們會在後續的單元再詳細討論 ) 而且不同的啟動方式也會造成狀態變化過程的差異, 請讀者參考圖 44-1 左邊的狀態變化流程圖是使用 startservice() 的結果, 右邊的狀態變化流程圖是使用 bindservice() 的結果 startservice() bindservice() oncreate() oncreate() onstartcommand () onstartcommand() 方法中的程式碼就是執行主要的工作 onbind() 利用取得的 Service 物件呼叫 Service 中的方法 stopservice() ondestroy() onunbind() unbindservice() Service 結束 ondestroy() Service 結束 圖 44-1 Service 的生命週期 詳細瞭解 Service 的狀態改變過程, 對於開發 App 程式是有必要的 舉例來說, 如果 Service 在執行的過程中開啟了一個檔案, 必須在它結束的時候 ( 也就是 ondestroy() 狀態轉變方法中 ) 關閉該檔案, 否則會造成該檔案被持續佔用的情況 開發 Service 的工作之一, 就是設計在不同狀態下應該執行的程式碼, 讓 Service 物件在各種情況下都能夠正常運作 介紹完 Service 的基本觀念之後, 接下來讓我們學習如何在 App 專案中實作 Service 366

13 44-2 在 App 專案中建立 Service 建立 Service 的過程就像我們在 App 專案中新增一個類別一樣, 請讀者依照下列步驟操作 : 在 App 專案中新增一個繼承 android.app.service 類別的新類別, 我們可以將這個新類別取名為 MyService Android 程式編輯器會自動幫這個 MyService 類別加上以下的程式碼, 其中只有 onbind() 方法, 如果讀者和圖 44-1 的 Service 狀態變化流程圖對照, 會發現還缺少其它狀態轉變方法, 因此接下來我們就把其它方法加進來 public class MyService extends Service { public IBinder onbind(intent intent) { return null; 請在 MyService 類別的程式碼編輯視窗中按下滑鼠右鍵, 在出現的快選功能表中選擇 Source > Override/Implement Methods, 就會出現圖 44-2 的對話盒 在對話盒的清單中會列出還沒有加入 Service 類別中的方法, 請讀者勾選其中的 oncreate() onstartcommand() ondestroy() 和 onunbind() 然後按下 OK 按鈕 Service 類別的 onstartcommand() 方法和 onstart() 方法在 Android 2.0 以前,Service 類別只有 onstart() 而沒有 onstartcommand(), 但是在 2.0 版 ( 包含 2.0) 以後, 為了補強原來 onstart() 的功能, 因此增加 onstartcommand(), 它是用來取代舊有的 onstart(), 因此在撰寫新的程式碼時, 應該使用 onstartcommand() 367

14 圖 44-2 利用 Eclipse 的 Override/Implement Methods 功能加入需要的方法 將 MyService 類別的程式碼編輯如下, 需要新增和修改的程式碼以粗體字標示 需要新增的程式碼不多, 主要是利用我們在單元 10 介紹的程式 log 技巧, 在每一個方法中加上產生 log 的程式碼, 讓我們可以追蹤 Service 物件的執行過程 需要特別注意的是,onBind() 方法必須傳回我們在類別中建立的 LocalBinder 類別的物件 如果沒有傳回這個物件, 就無法完成 bind Service 的動作 LocalBinder 是我們在 MyService 類別中定義的內部類別 (inner class), 它是繼承 Binder 類別, 其中有一個 getservice() 方法, 這個方法會傳回 MyService 物件 藉由這個方法, 我們才能夠在呼叫 bindservice() 的時候取得 MyService 物件 另外我們還增加了一個 mymethod() 方法, 它是用來驗證 bindservice() 的功能 public class MyService extends Service { private final String LOG_TAG = "service demo"; public class LocalBinder extends Binder { MyService getservice() { return MyService.this; private LocalBinder mlocbin = new LocalBinder(); public void mymethod() { Log.d(LOG_TAG, "mymethod()"); 368

15 public void oncreate() { Log.d(LOG_TAG, "oncreate()"); super.oncreate(); public void ondestroy() { Log.d(LOG_TAG, "ondestroy()"); super.ondestroy(); public int onstartcommand(intent intent, int flags, int startid) { Log.d(LOG_TAG, "onstartcommand()"); return super.onstartcommand(intent, flags, startid); public boolean onunbind(intent intent) { Log.d(LOG_TAG, "onunbind()"); return super.onunbind(intent); public IBinder onbind(intent intent) { Log.d(LOG_TAG, "onbind()"); return mlocbin; 在 App 專案的程式功能描述檔 AndroidManifest.xml 中加入這個 Service 類別的資訊如下 : <?xml version="1.0" encoding="utf-8"?> <manifest > <application > <activity </activity> <service android:name=".myservice" android:enabled="true" /> </application> </manifest> 369

16 以上就是建立 Service 類別的過程, 接下來介紹如何在主程式中啟動這個 Service 44-3 啟動 Service 的第一種方法 第一種啟動 Service 的方法是利用 startservice(), 它的程式碼很簡單, 請讀者直接參考以下範例 : Intent it = new Intent(Activity 類別名稱.this, Service 類別名稱.class); startservice(it); 其中的 Activity 類別名稱 就是啟動 Service 的主控程式類別, Service 類別名稱 就是我們要啟動的 Service, 例如前面範例中的 MyService Service 以這種方式啟動之後, 就會依照圖 44-1 左邊的流程執行, 如果主控程式要停止 Service 的運作, 可以執行以下程式碼 : Intent it = new Intent(Activity 類別名稱.this, Service 類別名稱.class); stopservice(it); Service 物件結束時會先執行 ondestroy() 方法, 我們應該在這個方法中釋放占用的系統資源 44-4 啟動 Service 的第二種方法 第二種啟動 Service 的方法是利用 bindservice() bindservice() 和 startservice() 最大的不同是主控程式可以取得 Service 物件, 因此在 Service 物件執行的過程中, 可以直接呼叫它的方法進行控制, 要完成 bindservice() 需要以下步驟 : 在主控程式中建立一個 ServiceConnection 的物件, 請參考以下程式碼 bindservice() 方法需要利用這個物件來取得 Service 物件 其中我們必須實作 onserviceconnected() 和 onservicedisconnected() 這二個方法 onserviceconnected() 方法會在 bind Service 的過程中, 由 Android 系統呼叫執行 裡頭的程式碼 ( 以粗體字標示 ) 就是取得 Service 物件, 並存入宣告在主控程式中的屬性 onservicedisconnected() 方法是當 Service 物件不正常結束時才會執行, 一般正常情況下不會執行 370

17 private ServiceConnection mservconn = new ServiceConnection() { public void onserviceconnected(componentname name, IBinder service) { mmyserv = ((MyService.LocalBinder)service).getService(); ; public void onservicedisconnected(componentname name) { 建立一個 Intent 物件, 並且指定要啟動的 Service 類別, 然後呼叫 bindservice() 如下, 其中 ServiceConnection 的物件 就是步驟 1 的 mservconn 物件 BIND_AUTO_CREATE 參數是讓 Android 系統視情況需要建立一個 Service 物件 Intent it = new Intent(Activity 類別名稱.this, Service 類別名稱.class); bindservice(it, ServiceConnection 物件, BIND_AUTO_CREATE); 如果要停止 Service 物件則執行以下程式碼 : unbindservice(serviceconnection 物件 ); 以上就是建立和使用 Service 的流程, 接下來我們用一個完整 App 專案來示範 44-5 範例程式 這個範例程式包含一個主控程式 Activity 類別和一個 Service 類別, 其中的 Service 類別就是前面小節介紹的 MyService 雖然它只是一個 Service 的架構, 沒有實際的功能, 但是我們可以利用它來驗證 Service 的執行流程, 以便在後續的單元中, 能夠實際應用 Service 完成特定的工作 在這個範例中, 我們會在主控程式的畫面加上一些按鈕, 以便測試 Service 的操作, 程式的執行畫面如圖 44-3 這個 Service 範例程式必須配合使用 Eclipse 的 Debug 功能, 以便觀察程式產生的 log 訊息, 如果讀者還不熟悉 Debug 模式的操作, 可以參考單元 10 中的介紹 在啟動這個範例程式之後, 可以利用畫面上的按鈕對 Service 進行控制, 同時觀察產生的 log, 以瞭解 Service 的執行過程, 圖 44-4 是測試之後得到的訊息畫面 以下列出主程式類別的介面佈局檔和程式檔, 以及程式功能描述檔 AndroidManifest.xml, 主程式類別中 371

18 宣告的 mmyserv 物件就是用來儲存 bind Service 時得到的 Service 物件, 其它有關 Service 控制的程式碼都已經在前面的小節中作過說明, 請讀者自行參考 最後再次提醒讀者, 務必要在程式功能描述檔 AndroidManifest.xml 中加入 Service 的資訊, 否則無法成功啟動 Service 圖 44-3 Service 範例程式的執行畫面 圖 44-4 測試 Service 範例程式得到的訊息畫面 介面佈局檔 : <LinearLayout xmlns:android=" xmlns:tools=" android:id="@+id/linearlayout1" 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=".mainactivity" > 372

19 <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 啟動 MyService" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 停止 MyService" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 連結 MyService" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 斷開 MyService" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" 呼叫 MyService 中的 mymethod()" /> </LinearLayout> 主程式檔 : public class MainActivity extends Activity { private Button mbtnstartmyservice, mbtnstopmyservice, mbtnbindmyservice, mbtnunbindmyservice, mbtncallmyservicemethod; private MyService mmyserv = null; private final String LOG_TAG = "service demo"; private ServiceConnection mservconn = new ServiceConnection() { public void onserviceconnected(componentname name, IBinder service) { 373

20 Log.d(LOG_TAG, "onserviceconnected() " + name.getclassname()); mmyserv = ((MyService.LocalBinder)service).getService(); public void onservicedisconnected(componentname name) { Log.d(LOG_TAG, "onservicedisconnected()" + name.getclassname()); ; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mbtnstartmyservice = (Button) findviewbyid(r.id.btnstartmyservice); mbtnstopmyservice = (Button) findviewbyid(r.id.btnstopmyservice); mbtnbindmyservice = (Button) findviewbyid(r.id.btnbindmyservice); mbtnunbindmyservice = (Button) findviewbyid(r.id.btnunbindmyservice); mbtncallmyservicemethod = (Button) findviewbyid (R.id.btnCallMyServiceMethod); mbtnstartmyservice.setonclicklistener(btnstartmyserviceonclick); mbtnstopmyservice.setonclicklistener(btnstopmyserviceonclick); mbtnbindmyservice.setonclicklistener(btnbindmyserviceonclick); mbtnunbindmyservice.setonclicklistener(btnunbindmyserviceonclick); mbtncallmyservicemethod.setonclicklistener (btncallmyservicemethodonclick); public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; private View.OnClickListener btnstartmyserviceonclick = new View.OnClickListener() { public void onclick(view v) { mmyserv = null; Intent it = new Intent(MainActivity.this, MyService.class); startservice(it); ; private View.OnClickListener btnstopmyserviceonclick = 374

21 new View.OnClickListener() { public void onclick(view v) { mmyserv = null; Intent it = new Intent(MainActivity.this, MyService.class); stopservice(it); ; private View.OnClickListener btnbindmyserviceonclick = new View.OnClickListener() { public void onclick(view v) { mmyserv = null; Intent it = new Intent(MainActivity.this, MyService.class); bindservice(it, mservconn, BIND_AUTO_CREATE); ; private View.OnClickListener btnunbindmyserviceonclick = new View.OnClickListener() { public void onclick(view v) { mmyserv = null; unbindservice(mservconn); ; private View.OnClickListener btncallmyservicemethodonclick = new View.OnClickListener() { public void onclick(view v) { if (mmyserv!= null) mmyserv.mymethod(); ; 375

22 在開始介紹 App Widget 以前, 我們先回想前面已經學過的幾種 App 型態 首先是 Activity, 當它啟動之後, 整個手機或平板電腦螢幕都被它獨佔直到結束為止 第二是 Service, 它和 Activity 剛好相反, 它是在背景執行, 完全沒有畫面 Service 啟動之後就一直持續執行, 直到工作完成才結束 第三是 Broadcast Receiver,Broadcast Receiver 執行時也沒有畫面, 當它接收到想要監聽的訊息時, 便開始執行它的工作, 完成之後又再度進入等候狀態 本單元的主角 App Widget( 簡稱 Widget) 和 Broadcast Receiver 有些類似, 它也是靠監聽訊息的方式執行, 並且具有下列特點 : 1. 它會在手機或平板電腦的操作首頁顯示程式的執行畫面, 而且執行畫面的大小可以由程式自己決定 2. 它有下列三種執行方式 : i. 固定時間間隔執行 ; ii. 在設定的時間點執行 ; iii. 當使用者按下程式畫面上的按鈕時執行 手機螢幕上的時鐘就是一個 App Widget 程式 如果我們按下 Android 4 手機螢幕下方中央的 Apps 按鈕, 然後在顯示的畫面上方點選 Widgets 標籤頁, 就會看到圖 45-1 的畫面 畫面中會列出目前已經安裝好, 可以加到 Home screen 的 App Widget 程式 例如可以按住 Calendar, 螢幕畫面就會顯示 Home screen, 將 Calendar 拖曳到想要擺放的位置再放開, 就會在 Home screen 加入 Calendar, 如圖 45-2 的畫面 如果想要移除首頁上的 App Widget, 可以先按住該 App Widget, 畫面上方就會出現一個 Remove 的項目, 如圖 45-3 把 App Widget 拖曳到 Remove 上方, 就可以從 Home screen 移除, 平板電腦的操作方式完全相同 了解 App Widget 的特性和用法之後, 接下來我們就開始介紹如何建立 App Widget 程式 376

23 圖 45-1 選擇 App Widget 程式的畫面 圖 45-2 加入 Calendar 小工具程式後的 Home screen 圖 45-3 從 Home screen 移除 App Widget 的畫面 其它 Android 版本設定 App Widget 的方法如果是 Android 3.X 的模擬器, 必須在 Home screen 畫面按下滑鼠左鍵, 並維持 1 秒鐘以上再放開, 就會切換畫面 點選螢幕最左邊的 Widgets 標籤頁就會列出所有的 App Widget 程式, 點選想要使用的 App Widget, 該程式就會加到模擬器的首頁 如果是 Android 2.X 的平台, 同樣是在 Home screen 畫面上按下滑鼠左鍵, 並維持 1 秒鐘以上再放開, 就會顯示一個功能表 選擇其中的 Widgets 項目, 就會出現 App Widget 程式清單, 從中挑選想要加入 Home screen 的 App Widget 即可 45-1 基本型的 App Widget 程式 首先介紹的是基本型的 App Widget 程式, 它是以固定時間間隔的方式執行, 而且間隔的時間長度必須大於 30 分鐘 ( 這個限制可以利用程式技術來突破, 我們留待下一個單元再介紹 ), 建立基本型 App Widget 的步驟如下 : 依照之前的方法建立一個新的 App 專案, 但是設定專案屬性的第二個對話盒中, 記得不要勾選 Create activity, 因為我們要建立一 377

24 個空的程式專案, 也就是說在 src 資料夾裡頭, 先不要產生任何程式檔 在 Eclipse 左邊的專案檢視視窗中, 用滑鼠右鍵點選 App 專案的 res 資料夾, 然後從快顯功能表中選擇 New > Android XML File 在出現的對話盒中, 將 Resource Type 欄位設定為 Layout,File 欄位輸入介面佈局檔的名稱, 例如 app_widget( 注意檔名只能用小寫英文字母 數字 或是底線字元 ), 然後在下方的項目清單中點選 LinearLayout, 最後按下 Finish 按鈕 新增的介面佈局檔會自動開啟在編輯視窗中, 請將內容編輯如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textcolor="#ffffffff" /> </LinearLayout> 接著要建立 App Widget 的程式檔, 由於我們建立的是一個空的專案, 所以一開始並沒有產生程式檔的套件路徑 請在 Eclipse 左邊的專案檢視視窗中, 用滑鼠右鍵點選 App 專案的 src 資料夾, 然後從快顯功能表中選擇 New > Package 在對話盒中輸入想要使用的套件路徑名稱, 例如 com.android, 最後按下 Finish 按鈕 在 Eclipse 左邊的專案檢視視窗中, 用滑鼠右鍵點選程式專案的 src/( 套件路徑名稱 ) 資料夾, 然後在彈出的選單中選擇 New > Class, 就會出現圖 45-4 的對話盒 在對話盒中輸入類別名稱, 例如 MyAppWidget, 然後按下 Superclass 欄位右邊的 Browse 按鈕, 在出現的對話盒上方的欄位輸入 AppWidgetProvider, 再點選下方清單中出現的 AppWidgetProvider 項目, 最後按下 OK 按鈕回到類別對話盒, 即可完成 Superclass 的設定, 然後按下 Finish 按鈕完成類別對話盒 378

25 圖 45-4 新增一個繼承 AppWidgetProvider 的類別 前一個步驟是建立 App Widget 的程式檔,App Widget 的執行流程和前面單元介紹的 Service 類似, 同樣都有許多狀態轉換方法 因此接下來我們加入幾個常用的狀態轉換方法, 包括 ondeleted() ondisabled() onenabled() onreceive() 和 onupdate() 請開啟 MyAppWidget 程式檔, 在程式碼編輯視窗中按下滑鼠右鍵, 接著在快顯功能表中選擇 Source > Override/Implement Methods, 就會出現圖 45-5 的對話盒 在對話盒左上方的清單中, 會列出 AppWidgetProvider 類別中的方法, 請勾選上述 5 個方法, 然後按下 OK 按鈕 圖 45-5 新增 MyAppWidget 類別中的狀態轉換方法 379

26 仿照上一個單元的作法, 在每一個狀態轉換方法中加入呼叫 Log.d() 的程式碼如下, 這些 log 訊息可以用來追蹤 App Widget 的執行過程 public class MyAppWidget extends AppWidgetProvider { private final String LOG_TAG = "my app widget"; public void ondeleted(context context, int[] appwidgetids) { super.ondeleted(context, appwidgetids); Log.d(LOG_TAG, "ondeleted()"); public void ondisabled(context context) { super.ondisabled(context); Log.d(LOG_TAG, "ondisabled()"); public void onenabled(context context) { super.onenabled(context); Log.d(LOG_TAG, "onenabled()"); public void onreceive(context context, Intent intent) { super.onreceive(context, intent); Log.d(LOG_TAG, "onreceive()"); public void onupdate(context context, AppWidgetManager appwidgetmanager, int[] appwidgetids) { super.onupdate(context, appwidgetmanager, appwidgetids); Log.d(LOG_TAG, "onupdate()"); 開啟程式專案的功能描述檔 AndroidManifest.xml, 登錄這個 App Widget 程式的資訊, 如以下粗體字的部分 App Widget 程式和 380

27 Broadcast Receiver 程式一樣, 都是屬於監聽訊息型態的程式, <receiver> 標籤中的 android:name 屬性是設定步驟三所建立的類別名稱, android:label 屬性是設定程式的名稱 在 <intent-filter> 標籤中的 <action> 也是和 Broadcast Receiver 一樣, 是用來指定監聽的訊息,<meta-data> 標籤的內容則是描述此 receiver 是屬於 AppWidgetProvider, 並指定它的組態設定檔的位置和檔名, 我們會在下一個步驟建立 App Widget 的組態設定檔 <?xml version="1.0" encoding="utf-8"?> <manifest...> <application...> <receiver android:name="myappwidget" android:label="app Widget" > <intent-filter> <action android:name="android.appwidget.action.appwidget _UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" /> </receiver> </application> </manifest> 在 Eclipse 左邊的專案檢視視窗中, 用滑鼠右鍵點選 App 專案的 res 資料夾, 然後從快顯功能表中選擇 New > Android XML File 在出現的對話盒中, 將 Resource Type 欄位設定為 AppWidgetProvider, File 欄位輸入檔名 app_widget_config, 然後在下方的項目清單中點選 appwidget-provider, 最後按下 Finish 按鈕 新增的組態設定檔會自動開啟在編輯視窗中, 請將內容編輯如下 : <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android=" android:minwidth="110dp" android:minheight="40dp" android:updateperiodmillis="3000" android:initiallayout="@layout/app_widget" > </appwidget-provider> 其中的 android:minwidth 和 android:minheight 屬性是定義 App Widget 啟動後, 在手機或平板電腦的 Home screen 上顯示的畫面大小 以手機來說,Home screen 一般切割成 4x4 的格子, 平板電腦則是 8x7 App Widget 執行時, 它的程式畫面會被縮放到剛好佔滿整數 381

28 個格子, 而且寬和高分別大於 android:minwidth 和 android:minheight 的設定值, 所以在設定這二個屬性值的時候, 必須知道 dp 長度單位和方格數目的關係 Android SDK 技術文件中提供表 45-1 的計算公式, 例如如果想讓 App Widget 在 Home screen 上的寬度佔滿 2 個方格, 高度佔滿 1 個方格, 那麼 android:minwidth 和 android:minheight 就要分別設定為 110 和 40 android:updateperiodmillis 屬性是設定每次執行的間隔時間, 以千分之一秒為單位, 例如 3000 表示 3 秒 但是請讀者注意,Android 系統在執行 App Widget 程式時, 最短的執行間隔是 30 分鐘, 也就是說所有小於 30 分鐘的設定都視為 30 分鐘 如果讀者希望執行間隔小於 30 分鐘, 必須搭配 Alarm Manager, 我們在下一個單元會示範實作方法,android:initialLayout 屬性是用來設定 App Widget 使用的介面佈局檔 表 45-1 Android SDK 技術文件中決定 App Widget 畫面大小的計算公式手機或平板電腦 Home screen 中的方格大小 ( 寬或高 ) minwidth 或 minheight 屬性的設定值 (dp) n 70 x n 30 以上就是建立 App Widget 程式的步驟, 完成之後啟動程式, 讀者會發現手機螢幕沒有出現執行畫面 這是正常的情況, 因為 App Widget 程式安裝之後, 必須由我們自己啟動 請讀者依照本單元前面的說明, 在 Home screen 中加入這個 App Widget 程式, 如圖 45-6 接著我們將它從 Home screen 中移除, 然後在 Eclipse 下面的視窗中切換到 LogCat 視窗, 再新增一個 Log 訊息的 Filter( 如果讀者不熟悉 Log 的操作技巧, 可以複習單元 10 的說明 ), 以檢視 App Widget 產生的訊息, 如圖 45-7 讀者會發現它並沒有依照我們在組態設定檔 app_widget_config.xml 中的設定, 每 3 秒更新一次 ( 也就是執行 onupdate() 方法 ) 關於這一點我們已經在前面解釋過, 原因是 Android 系統對於 App Widget 程式的執行頻率有 30 分鐘的限制, 如果要達到小於 30 分鐘的更新頻率, 必須配合 Alarm Manager, 我們將在下一個單元繼續介紹如何建立強化版的 App Widget 程式 382

29 圖 45-6 在手機的 Home screen 加入我們建立的 App Widget 圖 45-7 App Widget 程式執行過程中產生的 log 訊息 383

主程式 : 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

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

書面

書面 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

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc Author WeiKai Version 1.0.0 Date 2013/4/14 Page 1/11 我如何在 XPAC 上建立一個 COM port 通訊程式 Applies to: Platform OS version XPAC utility version XPAC series All versions (WinCE6) All versions XPAC SDK 提供 XPAC 結合

More information

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

More information

iziggi

iziggi iziggi 1 1 iziggi-hd 2 iziggi-hd 4 IPEVO iziggi-hd 6 iziggi-hd 8 iziggi-hd 9 Whiteboard App USB 10 iziggi-hd 11 iziggi-hd Live View WiFi 11 12 LED 12 iziggi-hd 13 Apple TV AirPlay 13 14 15 iziggi-hd *

More information

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

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

More information

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

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

More information

01_Service

01_Service 移动平台应用软件开发 Service 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年 什么是 Service 与 Activity 一样, 同属 Android 基本组件 后台运行, 不与用户交互, 没有可视化界面 最常见的 Service 如 : 在后台播放歌曲 后台执行文件的下载 同样需在 AndroidManifest.xml

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

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

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

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc)

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc) 作者 Amber 版本 1.0.0 日期 2012/04/25 頁數 1/7 如何使用 LED 燈顯示狀態? 適用於 : 平台 作業系統版本 XPAC utility 版本 XP-8000 系列 N/A N/A XP-8000-Atom 系列 WES2009 所有版本 N/A: Not applicable to this platform and OS. 注意! 欲變更系統的任何設定之前, 請先關閉

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

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21 Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21 Outlines for Today Future Planning Review System Architecture Dev. Tools & Making the First App Project Structure & File Details Application

More information

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

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

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

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

Microsoft Word - AEL 推薦序黃文良

Microsoft Word - AEL 推薦序黃文良 推薦序 黃文良教授 中央研究院資訊科學研究所 近年來由於 3G 網路普及, 硬體運算效能提升, 再加上各式應用軟體的靈活便利性, 智慧型手機漸漸取代傳統行動電話融入日常生活, 包括電子郵件 網頁瀏覽 影音播放 地圖查詢 拍照攝影, 各種功能隨手呈現即時互動帶來無比方便彈性 這種普遍需求現象也反映在許多手機品牌的亮麗銷售數據上 我們可以預期在通訊成本持續降低, 雲端運算逐步成熟, 網路早已無所不至的時代,

More information

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4 JAVA Extension 0..\Example\Ch0\ \ T.html..\Example\Ch0\ \ T.txt T.txt..\Example\Ch0\ \ T_Ok.html 提示 :. Marquee Marquee Font Color #FFFFFF BG Color #867bf Width 90 Height 50. T.txt Ctrl+C your scrolling

More information

第三篇 第 10 章 - 管理者登入第 11 章 - 更改網路商店 Logo 第 12 章 - 系統設定第 13 章 - 商品上架第 14 章 - 付款方式設定第 15 章 - 出貨方式設定第 16 章 - 特價商品 oscommerce 103

第三篇 第 10 章 - 管理者登入第 11 章 - 更改網路商店 Logo 第 12 章 - 系統設定第 13 章 - 商品上架第 14 章 - 付款方式設定第 15 章 - 出貨方式設定第 16 章 - 特價商品 oscommerce 103 第三篇 第 10 章 - 管理者登入第 11 章 - 更改網路商店 Logo 第 12 章 - 系統設定第 13 章 - 商品上架第 14 章 - 付款方式設定第 15 章 - 出貨方式設定第 16 章 - 特價商品 103 電子商務網站經營與管理 10-11 - Logo 12-13 - 14-15 - 16 - 一 情境描述 - 店主的心聲 1. 2. / 104 3. 第三篇網路商店新店開幕

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

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

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

Chapter 16 Widget 作者 : 林致孙 不少 Android 手機在使用者剛購買時, 手機的桌面上就已經有不少的小工具 (Widget), 有些可以即時顯示氣候資訊, 有些則可以顯示最新股票資訊 本章將 利用兩個例子來說明 Widget 是如何設計的 16.1 時辰顯示小工具 在 An

Chapter 16 Widget 作者 : 林致孙 不少 Android 手機在使用者剛購買時, 手機的桌面上就已經有不少的小工具 (Widget), 有些可以即時顯示氣候資訊, 有些則可以顯示最新股票資訊 本章將 利用兩個例子來說明 Widget 是如何設計的 16.1 時辰顯示小工具 在 An Chapter 16 Widget 作者 : 林致孙 不少 Android 手機在使用者剛購買時, 手機的桌面上就已經有不少的小工具 (Widget), 有些可以即時顯示氣候資訊, 有些則可以顯示最新股票資訊 本章將 利用兩個例子來說明 Widget 是如何設計的 16.1 時辰顯示小工具 在 Android 開發者網站, 已針對 Widget 的開發提供了一份詳細的文件 [1], 本章大部份的內容皆是參考該文件而製作的,

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. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以 System Monitor for Android SDK 開發者指南說明書 1. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以深入到開發者自行定義的功能,

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

Microsoft PowerPoint - App與微控器整合.pptx

Microsoft PowerPoint - App與微控器整合.pptx 1 2 Outline APP 與微控器整合 2017 中山大學電機實驗營 App 開發環境 -Android Studio 介紹 App 開發 實驗營 App 流程 3 4 Android Studio 介紹 Android Studio 是一個為 Android 平台開發程式的整合式開發環境, 可供開發者免費使用, 並在 Windows OS X Linux 平台上均可執行 專案結構 一個專案下有

More information

01 用 ActionScript 3.0 開始認識 Flash CS3 Flash 是應用在網路上非常流行且高互動性的多媒體技術, 由於擁有向量圖像體積小的優點, 而且 Flash Player 也很小巧精緻, 很快的有趣的 Flash 動畫透過設計師的創意紅遍了整個網際網路 雖然很多人都對 Fl

01 用 ActionScript 3.0 開始認識 Flash CS3 Flash 是應用在網路上非常流行且高互動性的多媒體技術, 由於擁有向量圖像體積小的優點, 而且 Flash Player 也很小巧精緻, 很快的有趣的 Flash 動畫透過設計師的創意紅遍了整個網際網路 雖然很多人都對 Fl 01 用 ActionScript 3.0 開始認識 Flash CS3 Flash 是應用在網路上非常流行且高互動性的多媒體技術, 由於擁有向量圖像體積小的優點, 而且 Flash Player 也很小巧精緻, 很快的有趣的 Flash 動畫透過設計師的創意紅遍了整個網際網路 雖然很多人都對 Flash 可以做精美的網路動畫並不陌生, 但是實際上 Flash 不僅如此, 只要搭配 ActionScript

More information

(Microsoft Word - wes _\246p\246\363\250\317\245\316watchdog\250\276\244\356\265{\246\241\267\355\276\367.doc)

(Microsoft Word - wes _\246p\246\363\250\317\245\316watchdog\250\276\244\356\265{\246\241\267\355\276\367.doc) 作者 Amber 版本 1.0.0 日期 2012/04/24 頁數 1/9 如何使用 watchdog 防止程式當機? 適用於 : 平台 作業系統版本 XPAC utility 版本 XP-8000 系列 WES2009 所有版本 XP-8000-Atom 系列 WES2009 所有版本 注意! 欲變更系統的任何設定之前, 請先關閉 EWF 的保護, 方能使變更值生效 ; 設定完成之後, 請再開啟

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

CU0594.pdf

CU0594.pdf 8 SOHO 1 3 003 SOHO SOHO Coder Programmer HTML CSS PHP JavaScrip 009 LECTURE 1-1 1 048 PART 2 LECTURE 1-1 1 049 SOHO Landing Page Landing 050 PART 2 LECTURE 1-1 1 SEO SEO P.093 SEO SEO SEO SEO SEO 051

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

THE GAME GUIDE WELCOME TO DARTSLIVE DARTSLIVE.com Ver.3.0 2013.05 HOW TO PLAY BEFORE YOU START THE GAME HOW TO PLAY THE GAME HOW TO COUNT THE SCORE AWARD MOVIE 自由設定AWARD! 讓飛鏢的樂趣多更多! AWARD MOVIE是甚麼? AWARD

More information

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆 Autodesk Product Design Suite Standard 20122 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆的產品設計計 Autodesk Product Design Suite Standard 版本中中包括以下軟體體產品

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

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089 Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁

More information

投影片 1

投影片 1 計算機程式及實習 期末報告 題目 : 六宿炒翻天 班級 : 奈米一乙姓名 : 陳洋翼學號 :4A514050 老師 : 謝慶存 程式說明 設計結帳系統, 選擇數量後, 在按下計算, 將會顯示總金額 若是老人或小孩, 將可享 8 折或 9 折的優惠 程式畫面 填選數量 在火腿蛋炒飯的數量選擇 1, 並按下計算, 可得總金額 50 元 程式畫面 打折 填選完後, 若客人是小孩或老人, 選擇欲打折項目,

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

2016 勒索軟體白皮書

2016 勒索軟體白皮書 Botnet Botnet 1 1 2 2 5 5 6 9 10 11 11 11 12 12 12 12 12 12 13 14 2016 1989 AIDS AIDS C 189 2005 2006 TROJ_CRYPZIP.A 2011 TROJ_RANSOM.QOWA 12 2012 REVETON 2013 Cryptolocker Cryptolocker AES RSA Cryptolocker

More information

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10

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

预览图 : (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

ShareText

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

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

Microsoft PowerPoint - SAGE 2010

Microsoft PowerPoint - SAGE 2010 SAGE Journals Online -Communication Studies 大綱 SAGE 簡介 Communication Studies 收錄內容 SJO 平台功能介紹 首頁 瀏覽功能 檢索功能 進階服務 SAGE Content 超過 520 種人文 社會科學 理工 科技領域電子期刊 SAGE 與超過 245 個國際知名的學會合作 ( 包括 American Sociological

More information

建模与图形思考

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

More information

SyncMail AJAX Manual

SyncMail AJAX Manual HKBN Cloud Mail on Mobile How to setup POP3 and IMAP (Version 1.1) 1 Table of Contents HKBN Cloud Mail 用戶設定 Android 手冊 HKBN Cloud Mail Android Setup... 3 Android 2.X... 3 Android 3.x - 4.X... 6 HKBN Cloud

More information

PowerPoint Presentation

PowerPoint Presentation Part 2 開始我們的 Android 程式設 計之旅 單元 4 安裝 Android 程式開發工具 單元 5 使用 Eclipse 建立第一個 Android 應用程式單元 6 瞭解 Android 程式專案的架構和執行流程單元 7 使用 TextView EditText 和 Button 介面元件單元 8 程式的錯誤類型和除錯方法單元 9 Eclipse 進階程式專案管理技巧單元 10 讓程式有美好的未來

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

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

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

More information

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M ASP.NET MVC Visual Studio 2017 1 1-4 MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\MvcExamples firstmvc MVC 1-7 ASP.NET MVC 1-9 ASP.NET

More information

Microsoft Word - ACI chapter00-1ed.docx

Microsoft Word - ACI chapter00-1ed.docx 前言 Excel Excel - v - 財務管理與投資分析 -Excel 建模活用範例集 5 相關 平衡 敏感 - vi - 前言 模擬 If-Then 規劃 ERP BI - vii - 財務管理與投資分析 -Excel 建模活用範例集 ERP + BI + ERP BI Excel 88 Excel 1. Excel Excel 2. Excel 3. Excel - viii - 前言 1.

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

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

手说TTS开发指南

手说TTS开发指南 手说 TTS 开发指南 v1.3 2011 年 6 月 版权所有 : 手说工作室 shoushuo.com 版本时间作者说明 1.0 2010-11-15 张波 1.1 2010-12-27 在 ondestroy 方法 unbindservice 1.2 2010-12-30 1.3 2011-6-12 去掉 TTS 初始化 ; ttsservice.initialize() 方法调用添加接口方法

More information

運算子多載 Operator Overloading

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

More information

! ios Swift ios Swift Swift Swift app app framework framework Apple Cocoa Touch 用 Swift 學習 Cocoa Touch framework Swift Swift 4

! ios Swift ios Swift Swift Swift app app framework framework Apple Cocoa Touch 用 Swift 學習 Cocoa Touch framework Swift Swift 4 ! ios Swift ios Swift Swift Swift app app framework framework Apple Cocoa Touch 用 Swift 學習 Cocoa Touch framework Swift Swift 4 http://www.secretlab.com.au/books/ learning-swift-3e Swift 4 Objective-C Swift

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

09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content

09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content 當智慧財產 侵犯人權? 智慧財產與人權 Kickstarter The Matrix The Matrix Avatar Eywa 12 2013 4 484 09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content

More information

Oxford iSolution下載及安裝指南

Oxford iSolution下載及安裝指南 Oxford isolution 下載及安裝指南 Download and Installation Guide 系統要求 System Requirements... 2 Oxford isolution 安裝步驟 Windows 個人電腦 Oxford isolution Installation Steps For Windows PCs... 3 Oxford isolution 安裝步驟

More information

新时期共青团工作实务全书(三十九)

新时期共青团工作实务全书(三十九) ........................... I II....................... 1990... .................. 1991......... III ,, 3 3 6 30 1990 19 19 ,, 30%, 1986 12 19 1989 12 25 1990 11 10 1989 10 30 1990 830 19 40

More information

價規一覽表 仁銓契約編號 : _275 區別 : 臺北市 新北市 桃園市 新竹縣 ( 市 ) 臺中市契約期間 :108/03/26~109/03/25 軟體標契約價是含稅 5% 與 IDB 服務費 1.5% 經濟部工業局 108 年第一次電腦軟體共同供應契約採購案號 _

價規一覽表 仁銓契約編號 : _275 區別 : 臺北市 新北市 桃園市 新竹縣 ( 市 ) 臺中市契約期間 :108/03/26~109/03/25 軟體標契約價是含稅 5% 與 IDB 服務費 1.5% 經濟部工業局 108 年第一次電腦軟體共同供應契約採購案號 _ 12 6 Citrix Virtual Apps Advanced Edition (CCU) 含 1 年 Customer Success Services Citrix Systems 5-100 NT$24,664 12 7 Citrix Virtual Apps Premium Edition (CCU) 含 1 年 Customer Success Services Citrix Systems

More information

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas Contents 目錄 chapter 1 1-1... 1-2 1-2... 1-3 HTML5... 1-3... 1-5 1-3... 1-9 Web Storage... 1-9... 1-10 1-4 HTML5... 1-14... 1-14... 1-15 HTML5... 1-15... 1-15... 1-16 1-5... 1-18 Apps... 1-18 HTML5 Cache

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

1

1 内 容 提 要 作 为 Google 开 发 的 全 新 开 源 手 机 平 台,Android 发 展 如 火 如 荼 本 书 通 过 大 量 代 码 秘 诀 全 面 详 尽 地 讲 述 了 Android 开 发 技 术 从 activity 和 intent 基 础 知 识 开 始, 到 线 程 服 务 broadcast receiver 以 及 alert 警 告 框, 再 到 用 户 界

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

AutoCAD 用戶如何使用 ArchiCAD

AutoCAD 用戶如何使用 ArchiCAD AutoCAD 用戶如何使用 ArchiCAD AutoCAD用戶如何使用ArchiCAD ( 中文版 ) 由 Scott MacKenzie, Simon Gilbert, Geoffrey Moore Langdon, David Byrnes, Ralph Grabowski 編寫 龍庭資訊有限公司 1/73 - 2. 3. 4. -

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

Chapter 1: Introduction

Chapter 1: Introduction Lesson 004 App 專案管理和 Gradle 設定技巧 Android Studio 是用 Gradle 套件來管理 App 專案 Gradle 的功能非常強大, 但是這也意謂著它的用法有一定的複雜度 建立 App 專案的時候,Android Studio 會自動幫我們產生正確的 Gradle 設定 但是軟體版本會不斷地更新,Gradle 也一樣 再加上 Android Build Tools

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

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

More information

Microsoft PowerPoint - C_Structure.ppt

Microsoft PowerPoint - C_Structure.ppt 結構與其他資料型態 Janet Huang 5-1 結構的宣告 struct 結構名稱 struct 結構名稱變數 1, 變數 2,, 變數 m; struct 結構名稱 變數 1, 變數 2,, 變數 m; student; student; 5-2 1 結構變數初值的設定 struct 結構名稱 struct 結構名稱變數 = 初值 1, 初值 2,, 初值 n student="janet","1350901",100,95

More information

Chapter 1: Introduction

Chapter 1: Introduction Lesson 006 完成第一個 App 專案 這個單元我們要完成一個可以和使用者互動的 App 專案, 這個程式專案會用到三種介面元件 :TextView EditText 和 Button TextView 是用來顯示字串, 例如欄位名稱, 或是程式的處理結果 EditText 可以讓使用者輸入資料,Button 則是讓使用者按下以啟動處理程序 我們要利用這三種介面元件, 完成如圖 6-1 的操作畫面,

More information

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1 科 技 部 自 由 軟 體 專 案 原 始 程 式 碼 使 用 手 冊 Source Code Manual of NSC Open Source Project 可 信 賴 的 App 安 全 應 用 框 架 -App 應 用 服 務 可 移 轉 性 驗 證 Trusted App Framework -Transferability Verification on App MOST 102-2218-E-011-012

More information

第 6 章 BroadcastReceiver( 广播接收者 ) 学习目标 掌握广播接收者的创建, 以及如何自定义广播 ; 掌握有序广播和无序广播的使用, 能够对有序广播进行拦截 在 Android 系统中, 广播是一种运用在应用程序之间传递消息的机制, 例如电池电量低时会发送一条提示广播 要过滤并

第 6 章 BroadcastReceiver( 广播接收者 ) 学习目标 掌握广播接收者的创建, 以及如何自定义广播 ; 掌握有序广播和无序广播的使用, 能够对有序广播进行拦截 在 Android 系统中, 广播是一种运用在应用程序之间传递消息的机制, 例如电池电量低时会发送一条提示广播 要过滤并 第 6 章 BroadcastReceiver( 广播接收者 ) 学习目标 掌握广播接收者的创建, 以及如何自定义广播 ; 掌握有序广播和无序广播的使用, 能够对有序广播进行拦截 在 Android 系统中, 广播是一种运用在应用程序之间传递消息的机制, 例如电池电量低时会发送一条提示广播 要过滤并接收广播中的消息就需要使用 BroadcastReceiver( 广播接收者 ), 广播接收者是 Android

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

DeskJet F2180 DeskJet F4185 Deskjet F4280 DeskJet D2460 OK N/A N/A DeskJet 1660 OK ( 無提供 Win 2000 驅動 ) N/A N/A PSC 1315 Photosmart 2575 Photosmart C13

DeskJet F2180 DeskJet F4185 Deskjet F4280 DeskJet D2460 OK N/A N/A DeskJet 1660 OK ( 無提供 Win 2000 驅動 ) N/A N/A PSC 1315 Photosmart 2575 Photosmart C13 DPR-1061/1020/2000 印表機相容測試清單 * 若您所查詢之印表機不在以下列示清單中的話, 代表該印表機為不支援或該型號尚未測試驗證, 建議先與印表機廠商確認您所使用的印表機是否可支援搭配列印伺服器及網路列印使用 相關資訊 : 1. 以下為實際通過 DPR-1061 測試的型號以多功能事務機為主, 並必須搭配 PS-Software 中的 PS-Link 軟體使用, 一般印表機 ( 噴墨,

More information

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136 漸層填色與圖樣填色 08 8-1 漸層填色 8-2 漸層填色編輯 8-3 油漆桶填色 8-4 編輯圖樣 Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 8-1 8-2 8-3 8-4 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop 8-1-1 Photoshop 8 136 漸層填色與圖樣填色 漸層填色

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

基于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

( )... 5 ( ) ( )

( )... 5 ( ) ( ) 2016 大學校院招收大陸地區學生聯合招生委員會 71005 臺南市永康區南臺街 1 號 E-mail:rusen@stust.edu.tw WEB:http://rusen.stust.edu.tw TEL:+886-6-2435163 FAX:+886-6-2435165 2 0 1 6 0 1 1 9 2016... 2... 3... 5 ( )... 5 ( )... 5 1... 6 2...

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

Outlook Express 設定說明 Offic 企業郵件 / 虛擬主機郵件 / Office 365

Outlook Express 設定說明 Offic 企業郵件 / 虛擬主機郵件 / Office 365 Outlook Express 設定說明 OfficeMail 企業郵件 / 虛擬主機郵件 / Office 365 版權及商標聲明 Cloudmax 匯智提供用戶商務用郵件服務, 本文件由 Cloudmax 匯智製作, 用於教導用戶 進行郵件服務相關設定, 內容中所使用的郵件工具非為 Cloudamx 匯智設計及擁有, 若對 程式資訊有疑問, 請洽程式提供商 本文件所引用之各商標及商品名稱分屬其合法註冊公司所有,

More information

Microsoft Word - 結案報告.doc

Microsoft Word - 結案報告.doc 2 3 4 5 ~ 6 1. 2. 3. 4. 7 ~ 8 9 ~ 10 11 12 13 14 15 96年原住民族電視節目增製計畫 結案報告 五 執行方式 一 甄試過程照片 16 17 18 夣 19 20 21 22 23 24 25 96年原住民族電視節目增製計畫 結案報告 26 27 28 . 29 30 31 32 33 . 34 . 35 96年原住民族電視節目增製計畫 結案報告 (

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

40/60 AM Cardio 40/60 ... 4 Cardio 40/60... 4... 5... 5 :... 5... 5... 6 : Cardio 40/60... 6 / (Cardio 40)... 6 / (Cardio 60)... 6 :... 6 : GPS... 7 : Brytonsport.com... 8... 9 :... 9 GPS... 10... 11

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

一 國家品質 5 10 象 : 8 7 ~ 二 卓越中堅企業及重點輔導象遴選 ,

一 國家品質 5 10 象 : 8 7 ~ 二 卓越中堅企業及重點輔導象遴選 , 貳 一 國家品質 二 卓越中堅企業及重點輔導象遴選 三 工業精銳 四 金點設計 五 台灣國際創意設計大賽 六 資訊服務應用創新競賽 七 輕金屬創新應用競賽 八 智慧型機器人產品創意競賽 九 數位內容系列競賽 十 手提包創新設計競賽 十一 時裝設計新人 十二 全國紡織技術論文競賽 一 國家品質 5 10 象 : 8 7 ~8 2435 二 卓越中堅企業及重點輔導象遴選 101 10 8 200 2,000

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

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 12 科學發展 2012 年 12 月,480 期 你可能不知道的媒體影響 劉正山若用 選戰 的角度來看選舉和參與選舉, 你大腦裡情感的作用一定大過理性的作用, 便會很習慣地拿各種媒體或別人的觀點來使自己的選擇合理化 2012 理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 14 科學發展 2012 年 12 月,480 期 agendasetting 報紙和網路新聞的頭版空間有限,

More information

重要提醒 貼心小提醒 : 您可以利用 Ctrl+F, 快速搜尋您的發票號碼喔! 統一集團登錄發票抽 2019 年第 07 週 ~ 中獎名單 i 禮贈序號皆有使用期限, 效期於實際序號兌換方式 (7-ELEVEN APP 或 ibon 印出之小白單 ) 及中獎 E-ma

重要提醒 貼心小提醒 : 您可以利用 Ctrl+F, 快速搜尋您的發票號碼喔! 統一集團登錄發票抽 2019 年第 07 週 ~ 中獎名單 i 禮贈序號皆有使用期限, 效期於實際序號兌換方式 (7-ELEVEN APP 或 ibon 印出之小白單 ) 及中獎 E-ma 重要提醒 統一集團登錄發票抽 2019 年第 07 週 20190213~20190219 中獎名單 i 禮贈序號皆有使用期限, 效期於實際序號兌換方式 (7-ELEVEN APP 或 ibon 印出之小白單 ) 及中獎 E-mail 通知 皆會顯示, 每週期各獎項使用期限非相同, 請記得於期限內兌換完畢喔! 電子發票 無需寄回, 中獎公告日自動發獎 1. 請中獎者下載 7-ELEVEN APP 或登入本活動網站

More information

! 2000 CSSsprites.com Web FTP app 20% 80% getelementbyid() UI Facebook F8 Web CSSsprites.com Web JavaScript CSS React xi React UI UI 反應 UI 宣告 d

! 2000 CSSsprites.com Web FTP app 20% 80% getelementbyid() UI Facebook F8 Web CSSsprites.com Web JavaScript CSS React xi React UI UI 反應 UI 宣告 d ! 2000 CSSsprites.com Web FTP app 20% 80% getelementbyid() UI Facebook 2015 3 F8 Web CSSsprites.com Web JavaScript CSS React xi React UI UI 反應 UI 宣告 declare 元件 DOM state JavaScript xi React Web ios Android

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

PowerPoint 簡報

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

More information