為了改善台灣長照環境所設計的長照服務整合平台。 此專題的理念是將長照環境搬進家中,減少家中子女負擔。 透過設計便捷的APP呼叫方式,以便年長者自行操作系統。

Created: August 7, 2021 12:07 PM

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

此專題目的於改善台灣政府的長照計畫,但十年長照計畫存在多種難以克服問題(如:長照服務申請過程繁瑣時間冗長、長照服務限制過多、照服員嚴重不足等問題),使得長照服務在推廣上難上加難,因此我們設計一套使得現代人能更方便使用且更容易接受的長照整合系統。

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

如下圖所示,由我們團隊提供資訊整合服務,使得需求端即受照顧者端得以享受方便的長照服務,也使家屬們能更放心出外工作。

Untitled

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

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

照上述表格所列出之實現技術的方法逐一完成後,再將各部分程式進行整合。然而過程並不是想像中的順暢,途中遇過許多瓶頸(如:語法錯誤、指令互不相容、資料庫及FTP伺服器架設困難等問題)。使得開發過程更困難了,這也是專題設計中會遇到的挑戰,我透過網路找尋相關應對的方法,在歷經重重難關之後終於將此APP實現。

依靠著其他隊員對於長照服務的專業度以及我所開發的APP,成功申請了一長照服務平台新型專利,最後也順利獲得U-start創新創業計畫補助。

專題架構

硬體架構:

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

    Untitled

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

    Untitled

  3. AndroidStudio開發軟體:

    Untitled

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

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

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

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

    Untitled

專題流程圖

Untitled

實作過程:

建立雲端SQL資料庫

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

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

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

亞馬遜雲服務(AWS):

Untitled

Google雲端平台(GCP):

Untitled

微軟Azure:

Untitled

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

設置MySQL伺服器

在成功設置了SQL伺服器後

登入雲端SQL伺服器之主機

Untitled

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

  1. 建立資料庫:

    Untitled

  2. 設定資料表內容:

    Untitled

  3. 添加測試的資料:

    Untitled

執行結果

Untitled

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

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

Untitled

安裝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://sql12.freesqldatabase.com/sql12252800";
un = "sql12252800";
pass = "84ViEd8Kig";

用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;  
...

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

系統登入中:

登入成功畫面:

Untitled

Untitled

使用APP傳送檔案至FTP主機

設定FTP主機

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

確認與FTP主機的連線:

Untitled

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

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

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

Untitled

在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, "上傳成功!"); 
......

結果

錄音畫面:

上傳畫面:

Untitled

Untitled

上傳至FTP伺服器結果:

Untitled

心得

這個專題從發想開始到結束花了我差不多四個月時間,說不辛苦是騙人的,起初僅僅是要擬定使用者的UI架構就與團隊成員討論了好幾個禮拜,在真正撰寫程式碼時,由於對行動裝軟體開發經驗不足,因此當時想到會遇到那麼多問題(API的相容性問題、SDK版本問題、使用權限問題等諸如此類麻煩的問題),在克服各種的難關後,我獲得了滿滿成就感,回過頭來想我也因此學習到許多難能可貴的經驗。