[ Android Apps ] Profile Manager(情境管理)與 NFC

Profile Manager(或稱 情境管理),其實指的就是將 響鈴音量/通話音量/通知音量/螢幕亮度/鈴聲 等各種設定,儲存成一個個的 profile,然後依據使用的環境條件,選擇適當的 profile,一次切換這些設定的行為。

換用 Android 之後,原本個人常用的 profile manager 軟體為 Phone Weaver。雖然 Phone Weaver 有很不錯的「自動切換 profile」功能,但是卻帶來了一些困擾。

大多數的 profile manager 實現「自動切換 profile」功能的方式,不外乎就是藉由 Wi-Fi 的 SSID 或是基地台的 UID 作為關係參考對象,每隔一段時間就自動偵測一下。假如脫出了該 AP 或基地台的服務範圍,就自動切換成別的 profile。如果偵測到與某 profile 關聯的 SSID 或 UID,就自動切換成該 profile。

於是個人就遇到一個狀況。

有 Home 與 Outdoors 兩個 profile。其中 Home 會將 Wi-Fi 開啟,而 Outdoors 則不開啟 Wi-Fi。當回到住家樓下時,因為進入了指定範圍,所以 Phone Weaver 就自動將 profile 切換至 Home,開啟了 Wi-Fi 功能。此時由於指定的 AP 有非常微弱的訊號被手機接收到,因此 Android 也自動的將通訊模式切換到 Wi-Fi。而慘劇就發生了:因為 AP 訊號過於微弱,以至於無法完成任何網路行為。可是又因為訊號存在,因此 Android 也不會切回 3G。

這個問題著實困擾了一陣子。在步行回住處的路上,或是在樓下暫時不上樓時,如果要進行需要網路通訊的操作時,往往會因為這樣而中斷。

但是設定自動切換的目的,就是不希望還要手動指定 profile。可是這個問題就自動切換的美意抵銷殆盡。

由於手上的 One X 有支援 NFC,便花了一點時間,研究一下是否可用 NFC 功能來達到切換 profile 的功能。以下是我這幾天的心得。



先來提一下這個方案的缺點。

要讓程式可以讀取到 NFC tag 來切換 profile,必須在「非睡眠」以及「非上鎖」狀態。也就是說,在螢幕關閉,或者是尚未解鎖的情況下,即使將手機靠近 NFC tag,也不會觸發任何反應。必須開啟螢幕且解鎖後,才能讀取 NFC tag 並且觸發 profile 切換的機制。

其實這是安全機制,而且目前看來沒有解除的方式。

這樣的話跟手動切換 profile 豈不是沒什麼兩樣?嗯…如果要說比手動切換 profile 好一點的地方大概是,解鎖後只需要讀取 NFC tag 即可,可以省下幾個步驟吧。而且像是 NFC Task Launcher 還有一些「特殊功能」,是一般的 profile manager 做不到的(後敘)。



先來簡介一下 NFC。

NFC,Near field communication,近場通訊 或 近距離無線通訊,是一種基於 RFID 演變而來的通訊技術。通訊距離極短(在 developer.android.com 上說 4cm 以內),傳輸率最大 424 Kbit/s(約 53KB/s)。

NFC 有分成卡模式,點對點模式與讀卡機模式。

以台北捷運為例,悠遊卡與單程票(藍色硬幣造型)就是屬於卡模式。而捷運閘門,以及便利商店或公車的裝置則是讀卡機。

目前 Android 手機支援的 NFC 應該都是點對點模式與讀卡機模式。



要利用 NFC 來切換 profile,硬體方面,由於手機本身已經具備讀卡機模式,因此接下來需要一個 NFC tag。

NFC tag 是卡模式的裝置,例如悠遊卡或是北捷單程票。NFC tag 也有分容量。例如悠遊卡的容量是 1024 bytes,而單程票則是 64 bytes。NFC tag 本身可以被重複寫入,但是一旦被設定成寫入保護之後,就變成了唯讀,無法再寫入。

如果已經有了一個 NFC tag,接下來就是軟體了。



軟體方面,選用了三隻軟體:

其中,NFC Task Launcher(以下簡稱 NTL)與 NFC ReTAG Free(以下簡稱 NRTF)二選一。因為這兩隻軟體基本上負擔的角色是相同的,但是在功能面卻有差異(以下將會介紹到)。而 profile 方面,則不使用 NTL 或 NRTF 內建的,改採用 Tasker 這隻強大的 profile 管理工具。(當然各位可以不使用 Tasker,單純使用 NTL 或 NRTF 內建的 profile 管理功能,應該已經足以應付許多需求)。



來提一下 NTL 與 NRTF 的差異。由於並沒有花非常多的時間個別深入兩個軟體,所以可能會有些許的誤差,還請多指教。

NRTF NTL
profile 可調整項目 相似 相似
對 NFC tag 的需求 唯讀或可寫入 tag 都可使用 需要可寫入的 tag
profile 與 tag 的關係 綁定。profile 無法變更關聯的 tag。 非綁定。profile 可重複利用於不同的 tag。
特殊功能 可以將標準 profile 設定寫入 tag 中,每台具備 NFC 功能的 Android 手機可以直接讀取 tag 就切換成儲存的 profile 的設定值。

這個簡易的對照表,可以看出 NRTF 與 NTL 應用環境上的差異。

如果手頭上沒有可寫入的 NFC tag,NRTF 會是一個比較好的選擇。但是如果要追求 profile 的自由度,那麼 NTL 會是較佳的方案。另外 NTL 自稱可以將 profile 設定的內容寫入 NFC tag 裡面,只要其他支援 NFC 的 Android 讀取該 tag,該手機的相關設定就會被變更,而且該手機不必安裝 NTL。這實在太有趣了!可惜手邊沒有足夠容量的可寫入 NFC tag。但是一定會找時間試試看的。



實際應用。請記得先將手機的 NFC 功能啟用。

NFC ReTAG Free

  1. 啟動 NRTF。
    01

  2. 將 NFC tag 與手機背面接觸並稍待 NRTF 掃瞄到該 tag
    02

  3. 在上一步驟中,按下 ‘Add TAG’ 後,就會進入設定畫面。
    03

  4. NRTF 預設是沒有樣板(template)。樣板是從已經做好的 profile 來擔任。因此此時按下 ‘Template’ 按鈕是沒有意義的。現在來新增這個 profile 欲變更的系統設定或是欲執行的行為。按下 ‘+Activity’。
    04
    按下 ‘Please choose’ 右邊的小三角形,會出現下拉式選單,列出可用的行為選項。

  5. 這裡為了示範,因此選擇了 ‘Show pop-up’,並且在 Parameter 填入 “Tag1 pop-up”。
    05

  6. 在上一個步驟中,點了‘OK’ 後,就會看到新增的行為了。
    06

  7. 接下來按下‘OK’ ,就可以回到 profile 清單。
    07
    在這邊,長按 profile,可以編輯/刪除該 profile,或是將該 profile 設定為樣板。

  8. 接下來,測試一下。拿出剛剛的 NFC tag,接觸手機背面,當 NRTF 讀取到該 tag 時,會先在螢幕上顯示一個告知訊息。
    08

    接著就會執行該 tag 關聯的 profile 中設定的行為:
    09

接下來,來看看 NFC Task Launcher。

  1. 啟動 NTL。
    01
    NTL 與 NRTF 不同的地方在於,NRTF 要先讀取一個 tag 再建立 profile(並且把這個 profile 與該 tag 綁定)。而 NTL 則是先建立 profile,再寫入 tag。

  2. 在上一個步驟,按下‘New Tag’。
    02
    最下方的‘Erase tag’,如果啟動這個功能,NTL 會要求把一個 tag 與手機接觸,然後就把該 tag 可以刪除的內容全數刪除。如此一來,就可以有空間儲存 NTL 的資訊。

    ‘New task’ 可以用來建立新的 profile。

    ‘New switch’ 可以用來建立一個「由兩組 profile 組成的一個集合」。當這個集合關聯的 tag 被讀取到時,會自動切換到第一個 profile。如果當前的 profile 是這個集合中的任一 profile,則會自動切換到另外一個 profile(也就是兩個 profile 互相切換,所以稱為 switch)。

    NTL 不只可以儲存 profile,也可以用 NTL 來儲存 URI / URL / vCard / message 等等資訊到 tag 裡面(當然,這些資訊是無法用來切換 profile 的)。

  3. 先來看看‘New task’ 吧。
    03
    中央上面的‘RENAME’ 可以用來修改這個 profile 的名稱。

    要設定這個 profile 帶動的行為,按下‘+Add action’,就會出現行為列表供選擇。

    值得注意的是,在橘色字體“TASK CONTENTS” 右側有個 bytes 的度量表,這邊會顯示目前選擇的行為將會需要多少 byte 的容量。由於 NTL 的設計上,是將 profile 寫入 tag 中,因此務必確保 tag 中有足夠的容量。

  4. 行為設定完成後,按下‘RENAME’ 旁邊的‘FINISH’。
    04
    此時 NTL 會要求將一枚可寫入的 NFC tag 與手機接觸,然後就會將 profile 寫入 tag 中。如果 tag 無法寫入或是容量不足,NTL 都會出現警告訊息,要求解決問題後,重新寫入。

    ‘Mark tag read only’ 會令該 tag 變成唯讀。要注意,tag 一旦變成唯讀就再也無法寫入了,因此除非很確定,否則請不要進行這個操作。

    如果只想建立一個 profile 供 switch 用,在這個步驟可以直接按左上角的‘FINISH’,就不用寫入。

  5. 來看看 switch 這個功能。
    06
    在 switch 中,直接點擊畫面上的 Unassigned 處,會出現選單,可以選擇已經存在的 profile,或是建立新的 profile。使用 switch 的話,一定要寫入 tag 中。switch 的資料只會存在 tag,在 NTL 是看不到也無法修改的。因此如果要修改一個 tag 關聯的 switch,需要先把該 tag 內容刪除(用‘Erase tag’),然後再重新跑一次‘New switch’,重新關聯 profile。


Tasker 就不在這邊介紹了,因為內容太多了。



如果使用 Tasker 作為 profile 管理器,要先將 Tasker 中,允許外部呼叫的選項打開。然後在 NTL 或 NRTF 設定時,行為選擇 “Tasker”,自然就可以選擇 Tasker 已經設定好的 profile(在 Tasker 中,是 Task)。如此,讀取 tag 時,觸發 NTL 或 NTRF 的行為,就會帶起 Tasker 的 Task,而改變系統設定。