目前分類:輕鬆實用學習 delphi XE5 for Android app (11)

瀏覽方式: 標題列表 簡短摘要

今天是今年最後一天,先預祝大家新年快樂!在 XE5 mobile 的道路上,我們都還是新手,也還有很多需要學習的地方,歡迎大家互動交流。

由於 XE5 目前尚不提供「直接」撰寫 Android receiver 或是 service 等的能力,詢問過 Gordon 老大 EMBT 有沒有說何時會提供解決方案?Gordon 老大說有在研究但沒有時間表,所以如果現在就要撰寫屬於你自己的 receiver 或是 service,那麼唯一的一條路,就是撰寫部分 java class、compiler 成 classes.dex 後,再把它 import 進 XE5 中。至於如何把 java class 編譯成 classes.dex 呢?如果你有一路看前面幾篇 blog 過來的話,你應該有發現 blong 老大已經幫我們準備好了一個「build.bat」,話說 batch 這種檔案,非得一定要上了些年紀的才會看過、瞭解其中語法,不然新新人類其實是粉少接觸這類檔案的。

 

build.bat 這個 batch 檔案,主要是幫你完成兩件事情,第一件是把 java class 編譯成 test_classes.dex,再 merge 到原本 EMBT 的 classes.dex 變成一個新的 classes.dex,deploy 的時候就改用這個新的 classes.dex 就可以了。不過因為大家開發環境不同,所以必須要先調整過  build.bat 檔案內容,才有辦法順利完成編譯的動作。

接下來就提示幾個重點

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(1) 人氣()

即將進入的這最後一個步驟,也是小弟我潛心研究在這塊花費時間最久的部分。為了簡化各位實做的難度,我們將直接藉助 blong 老大產出的 classes.dex,但是在 XE5 client 端的部分,由於 blong 老大給我們的 smaple code 太複雜,所以就讓小弟我現醜簡化一番。

首先,我們要下載在前言部分有提到的 blong 老大在 Delphi and Android services (part 2) 這篇文章中提供給我們的 source code,下載後解壓縮,你可以在 \DelphiServiceDemo\java\output\dex 目錄找到 blong 老大為我們編譯好的 classes.dex,先記得有這個檔案,我們稍晚會用到…

接下來,還是就新增一個專案,畫面類似如下

其中 Register Device 在 (b)申請 GCM 與設備端(client)註冊並取得 regID 的文章中已經說明過了,這邊就不再贅述。這次的重點,集中在 Register Receiver 這個 Button Click 下去該做些什麼事情。先在 Form private 的部分,宣告兩個全域變數,並 uses ActivityReceiverU,如下

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(10) 人氣()

如果前面一個階段,您已經順利完成的話,那麼接下來我們就準備進入 Server 端發送訊息的部分…

這部分並不困難,首先在畫面的部分,大概是長這樣

主要是使用 Indy 的 IdHttp 元件,透過 https(google 要求)將你想發送的訊息以及給哪一個設備,告知 Google 的 GCM Server,訊息格式也是要比照 Google 的要求,以 json 的格式來傳送。

在上述畫面中 registration_ids 後面接的 APA91bEs74xboNq1....,指的就是你要將訊息傳遞給那個設備,而如何指定是那個設備,就是前一篇文章中所提到的 regID (目前長度為 162 位元)。另外在 data 的部分,就是指要傳遞什麼訊息給這個設備,上述畫面中只是舉例,你也可以傳遞更多訊息(欄位),只要不脫離 json 格式即可。

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(2) 人氣()

關於 GCM 運作原理更多的資訊,其實很多網友都已經有分享了,小弟就不多著墨在這部分,如果想瞭解推薦可參考以下網址

http://nkeegamedev.blogspot.tw/2013/01/gcm.html

在正式開始進入程式撰寫的部分,你也需要先跟 Google 申請相關的服務,才有辦法繼續進行,同樣的申請步驟也有很多網友分享,同樣推薦參考網址如下

http://nkeegamedev.blogspot.tw/2013/01/gcm-gcm-api-key.html

如果接下來您想要一步一步跟著實做 GCM 的部分,上述申請的步驟一定要先完成,主要就是

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(10) 人氣()

Google 雲端通訊(GCM),英文名稱為 Google Gloud Messaging,至於 GCM 的用途,主要就是「開發人員可透過此服務將自己伺服器中的資料傳送給 Android 應用程式使用」,較為細節的說明則可以參考以下 Google 中文官網說明

https://support.google.com/googleplay/android-developer/answer/2663268?hl=zh-Hant

這個功能,筆者認為在實務上可以用於很多方面,雖然官方說並不保證設備端一定可以收到訊息,但是看在「免費」的份上,應該也沒什麼好挑剔的了吧…既然想用,勢必就得瞭解 GCM 的來龍去脈,沒想到栽進去之後,才發現不但 XE5 目前尚不直接支援,就連 Google 大師也找不到任何有關 XE5 與 GCM 的 solution,找得到的訊息就是也有人在問,但是沒有一個直接的解答... like this

https://forums.embarcadero.com/thread.jspa?threadID=93361

http://stackoverflow.com/questions/18891486/broadcast-receivers-in-delphi-xe5-android

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(1) 人氣()

用 XE5 撰寫的 App,啟動時間大約都需要 3~4 秒才能看到畫面,按照研討會 Gordon 大師的說法,其實不只是 XE5 寫的 app,用 Java 寫的也是一樣,主要是 VM 載入跟啟動都需要時間,因此有所謂的「黑屏」,也就是使用者啟動 app 到看到第一個畫面中間,螢幕都是黑壓壓的一片,有人會感覺這樣的 app 很不優,所以要用 Splash Screen 來做一個畫面上的喬接或轉場…

在研討會中,Gordon 大師除了說明 app 啟動方式與運作流程的原理,也有說明如何撰寫 Splash Screen 結合 app,並當場展示使用 Splash Screen 的效果,的確很不錯,大概不需要 1 秒就可以看到畫面(Splash Screen),然後才進入 app 主畫面,問題是...研討會聽完之後,QCom 網站也有放上了 source code,但不禁想問問大夥,有多少人可以依樣畫葫蘆弄出來?

至少筆者我就是在研討會中有聽..且好像有聽懂,但是要筆者自己做,卻不知道該如何下手的那位…就算下載了 QCom 上的 source code,也就是 source code,該怎麼弄進自己的 app 呢?完全沒個頭緒,你呢?

不是說師傅領進門,修行在個人嗎?大師都指點迷津過了,也不能太漏氣吧,最近花粉多時研究 GCM 已經沒有個著落非常鬱悶了,只好先來玩玩 Splash Screen,看看能不能獲得一點點小確幸

首先我們先查看一下在 Java 的世界 Splash Screen 該如何做呢?在 Google 搜尋了很多文章後,覺得以下這篇條理較為清晰,比較有參考價值

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(4) 人氣()

Read Barcode 有粉多種方法,趕在明天上 Gordon 大師的技術研討會前,先這次介紹其中比較簡單使用的一種(也許並非最好的,相信 Gordon 大師會有更好的分享)。

在 Read Barcode 時,真正讀取的部分都是運用現成、別人寫好的東西,不管是透過呼叫 apk 或是 java class 的方式都一樣,否則要重頭到尾自己把解析 barcode 這段邏輯搞出來,就已經可以搞到退休了,畢竟 barcode 那麼多種,解析影像或是圖片的方式,也不是常人可以理解的(包含筆者我啦)。這次要運用的,是一個很多手機出廠時就會預先安裝的 app,名稱為「條碼掃描器」

所以在完成後續這個 app 之前,一定要先確認有安裝「條碼掃描器」這個 app,否則是沒辦法執行正確的…

接下來就在主 Form 上各擺一個 TMemo、TButton、TTimer,不囉唆,直接把 code 完整 port 上

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(2) 人氣()

如果你已經通過上一關的考驗,那麼接下來這最後的部分,應該就不會太難了。

在 Android 的環境中,其實跟在 Windows 中的環境差不多,如果作業系統已經知道該檔案(副檔名)的關連性的話,要開啟那個檔案,作業系統會自動依據該副檔名以相對應的軟體來開啟,比如我們在 Windows 環境中,如果要開啟一個 url,比如 http://www.google.com,你會怎麼做?

是不是用 ShellExecute 呢?像這樣

  ShellExecute(0, 'open', 'www.google.com', nil, nil, SW_MAXIMIZE);

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(5) 人氣()

既然已經確定 Server 端有比較新的版本了,那麼該如下載呢?筆者直覺想到的方法有幾種,比如透過 HTTP、FTP 等,不過且慢,真的要實做的時候,才會發現如果要透過 HTTP,那麼不是得在 App 專案上置放 Indy 元件才有辦法?那麼已經有點大的 apk 又要增胖了...不好不好,那改用 FTP 的話呢?更慘,不但 Indy 元件跑不掉,而且 Server 端還得多開 Port 21 與實做 FTP Server 的功能...還有沒有其他方法呢?

其實是有的!仔細想想你現在不是在用 DataSnap Server & Clinet 嗎?難道不能用現成的 DataSnap 機制來傳輸檔案嗎?答案是可以的,實做也並不困難,在 Server 端實做一個 function,回傳值為 TStream,Client 端負責把 TStream 接下來然後轉存為檔案即可,Port 也不用多開,真是一舉數得…不過話說回來,用「講」的比較快啦,實做起來的難度,跟之前其他篇比較來,還是稍微硬一點點。接下來就讓我們開始吧...

首先要新增一個 DataSnap Server 與 DataSnap Client 的專案,如果不知道怎麼新增,請參閱之前快快樂樂系列的文章

 

快快樂樂學習 delphi XE5 for Android app(三)(a)建立 DataSnap Server

快快樂樂學習 delphi XE5 for Android app(三)(b)在 App 顯示後端資料庫的資料 with DataSnap Client

 

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(8) 人氣()

自我更新?為什麼需要?如果上架 Google Play 後,這部分不是就交給 Google Play 的機制了嗎?是的,這部分沒錯,但是如果沒有要上架 Google Play 的話呢?為啥不上架 Google Play 可能有千萬個理由,包含「不想被 Google A 走 25 美金」、「公司內部使用,不需要上架」等等。這時候更新的機制,就必須要自己來處理了,總不會希望你的使用者,每次都要透過 USB 傳輸線才能更新 App 吧...這樣使用者體驗不太優喔...

 

在開始之前,我們先參照前人的分享

Android应用开发笔记(12):Android应用的自动升级、更新模块的实现

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(0) 人氣()

在開始比較複雜的應用前,還是先來盤小菜好了。話說好不容易寫出 app 給想玩玩看的人來用,沒想到馬上就被打槍,問說手機內存太小,可不可以將 App 選擇裝在 SD 卡上?

這是什麼意思?如果你有裝 Line 這個 App 的話,開啟「應用程式資訊」,你可以看到如下選項

「手機儲存」指的就是 external storage,常見的就是 microSD 卡,可是如果你用 XE5 寫出來的 App,安裝完成後打開應用程式資訊,卻會是這樣

文章標籤

縹緲 發表在 痞客邦 PIXNET 留言(0) 人氣()

找更多相關文章與討論