本專題是一套以 Android App 為核心的長照服務整合平台,目標是讓照護需求、家屬端與服務端之間的資訊傳遞更集中。 設計重點放在簡化年長者可操作的呼叫流程,並透過雲端資料庫與 FTP 檔案傳輸完成基本資料管理與語音訊息上傳。

專利公告號:M556380 獲得 107年度 U-start創新創業計畫第一階段補助 50萬 獲得 107年度 亞洲大學盃第七屆校園創業競賽 第二名

此專題從台灣長照服務使用流程出發,觀察到申請流程、服務媒合與照服員資源分配等問題會增加家屬與受照顧者的使用門檻。因此我們設計一套長照整合系統,嘗試把需求端、家屬端與服務資訊集中在同一個 App 流程中。

以下為我們設計所的系統之主要架構

如下圖所示,系統以資訊整合為核心,讓受照顧者端可以提出需求,也讓家屬端能查看相關紀錄與狀態。

長照服務整合平台畫面

起初在動手做這套APP前,我先將需要使用的技術列出來,再來構思相關行為能夠實現的方法,如下表所示。

專題所需之主要技術實現技術的方法
記錄受照顧者端之個人資料及所購買服務利用雲端MySQL伺服器儲存資訊,減少伺服器負荷
受照顧者端傳輸其語音訊息利用遠端方式存取FTP伺服器,將資料傳送至此
用戶利用APP進行登入身分動作使用JDBC(Java資料庫連接)的方式完成對SQL伺服器的驗證
受照顧者端使用APP連線FTP伺服器的方法使用FTPClient(Java檔案傳輸)的方式,實現使用者上傳下載資料

照上述表格逐一完成後,再將各部分程式進行整合。過程中遇到語法錯誤、指令相容性、資料庫與 FTP 伺服器架設等問題,也因此累積了行動 App、資料庫連線與檔案傳輸整合的實作經驗。

結合團隊成員對長照服務的研究與我負責開發的 App,本專題申請了長照服務平台新型專利,也獲得 U-start 創新創業計畫補助。

專題架構

硬體架構:

  1. 雲端SQL伺服器(freesqldatabase.com):

    長照服務整合平台畫面

  2. 遠端FTP伺服器(FileZilla):

    長照服務整合平台畫面

  3. AndroidStudio開發軟體:

    長照服務整合平台畫面

專題主要架構分為三部分:

  1. 被照顧者端:擁有輔具租借、交通接送、送餐、照護、緊急回應、客服回應等服務

  2. 照顧者端:監視、查看歷史紀錄、緊急服務、監看健康紀錄、警訊接收、客服回應等服務

  3. 伺服器端:處理照顧者端與被照顧者端之資料傳遞、執行各項服務,紀錄使用者之個人資料、病理紀錄等

    長照服務整合平台畫面

專題流程圖

長照服務整合平台畫面

實作過程:

建立雲端SQL資料庫

在建立起雲端資料庫之前必須對SQL有概念。

SQL資料庫可以儲存大量的資料,而是要有意義的,可以針對資料新增、刪除、修改,而且其語言很特殊有四大語言:資料查詢語言 (DQL) - 資料定義語言 (DDL) - 資料操縱語言 (DML) - 資料控制語言 (DCL)。

一開始在建立SQL時我是使用WAMP(Windows+Apache+MySQL+PHP)的方式,在本機電腦上建立SQL伺服器。但因為本機端網路的不方便,因此我想要使用雲端伺服器來進行存取,現今科技的雲端資料庫技術已經成熟了,目前主流伺服器為

亞馬遜雲服務(AWS):

長照服務整合平台畫面

Google雲端平台(GCP):

長照服務整合平台畫面

微軟Azure:

長照服務整合平台畫面

以上雲端資料庫都是非常厲害功能齊全的,也因此需要使用者付費,最後我選擇使用免費的雲端伺服器freesqldatabase.com,其功能與各大伺服器中能有落差,但因是免費使用且料庫系統為MySql,因此用來作為學術用途,是適合不過了。

設置MySQL伺服器

在成功設置了SQL伺服器後

登入雲端SQL伺服器之主機

長照服務整合平台畫面

在伺服器MySQL Server執行 SQL查詢:

  1. 建立資料庫:

    長照服務整合平台畫面

  2. 設定資料表內容:

    長照服務整合平台畫面

  3. 添加測試的資料:

    長照服務整合平台畫面

執行結果

長照服務整合平台畫面

使用Java Database Connectivity(JDBC)存取雲端SQL資料庫

JDBC(Java DataBase Connectivity)是用於執行SQL的Java解決方案,當應用程式需要連線資料庫時,就呼叫這組API。

長照服務整合平台畫面

安裝JDBC MySQL驅動至AndroidStudio

JDBC為java程式訪問各種類型的SQL提供了統一的接口,用戶不必針對不同數據庫寫出不同的代碼,但是使用JDBC必須得下載相應的驅動

由於我是是使用phpmyadmin建立MySQL資料庫,因此我必須下載Mysql的驅動:[mysql-connector-java-5.1.43-bin.jar]

再添加JDBC驅動至AndroidStudio後,由於與系統相容性差異的問題必須添加幾行程式碼至在所有module的build.gradle,以確保程式執行順利

tasks.withType(JavaCompile) {     sourceCompatibility = “1.7”     targetCompatibility = “1.7” }

compileOptions {     sourceCompatibility JavaVersion.VERSION_1_8     targetCompatibility JavaVersion.VERSION_1_8 }

在AndroidStudio使用JDBC指令實現對登入帳戶的驗證

設定連入SQL伺服器的相關驗證

db = "jdbc:mysql://example-host/example_db";
un = "example_user";
pass = "********";

用try-catch指令驗證帳戶資訊:

如果登入SQL伺服器成功,使用SQL指令驗證使用者是否為列表用戶

String query = "select * from tbl_client where username= '" + usernm + "' and password = '"+ passwd +"'  ";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs.next())
{
    z = "Login successful";
    isSuccess = true;  
...

除了驗證帳戶的方法外,還得完善其他的附加功能,如帳號登入失敗動作、錯誤以及例外的資訊顯示等。

系統登入中:

登入成功畫面:

長照服務整合平台畫面

長照服務整合平台畫面

使用APP傳送檔案至FTP主機

設定FTP主機

在處理傳送的檔案至伺服器之前,必須要先有能夠連至外網的伺服器主機,一般可利用路由器的連接埠轉發(Port Forwarding)功能即可輕易達成。

確認與FTP主機的連線:

長照服務整合平台畫面

使用Apache Commons FTPClient API傳輸資料至FTP主機

Apache Commons Net 實現了許多基本Internet協議的客戶端,這次我使用了其中一個類別的指令,FTPClient來進行檔案傳輸的實現

FTPClient API使得APP能夠輕易地完成檔案傳輸的動作

長照服務整合平台畫面

在AndroidStudio使用FTPClient指令實現資料上傳功能

安裝apache commons net 3.3驅動與其環境參數。

設定FTPClient指令登入FTP伺服器

new Thread(new Runnable() {
    public void run() {
        boolean status = false;
        status = ftpclient.ftpConnect("andy.iceryofficial.com", "andy", "*****", 21);
        if (status == true) {
            Log.d(TAG, "連線成功");   
......

設計按鈕按下時錄音,放開時上傳的動作:

使用MediaRecorder方式實現錄製動作

String currenttime = new SimpleDateFormat("MMddHHmm").format(new Date());
mFileNamepath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/OlderSupport/";
mFileName =  currenttime+ mFileStatue + ".mp3";
mRecorder.setOutputFile(mFileNamepath+mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  try {
    mRecorder.prepare();
} catch (IOException e) {
    Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
......

使用ftpUpload方式實現上傳資料動作

pd = ProgressDialog.show(MainMenu.this, "", "上傳中...",true, false);
new Thread(new Runnable() {
    public void run() {
        boolean status = false;
        status = ftpclient.ftpUpload(
                mFileNamepath+mFileName,
                mFileName, "/oldersup", cntx);
        if (status == true) {
            Log.d(TAG, "上傳成功!"); 
......

結果

錄音畫面:

上傳畫面:

長照服務整合平台畫面

長照服務整合平台畫面

上傳至FTP伺服器結果:

長照服務整合平台畫面

心得

這個專題從發想到完成約四個月。前期花了不少時間與團隊討論 UI 架構,實作時也遇到 API 相容性、SDK 版本、使用權限與資料傳輸等問題。回頭看,這個專題讓我第一次完整經歷從需求討論、App 開發、資料庫串接到檔案上傳的整合流程。