1. 程式人生 > >Android Wear計時器開發(1)

Android Wear計時器開發(1)

記得在2013年12月的時候,有系列文章是介紹怎麼開發一個智慧手錶的App,讓使用者可以在足球比賽中記錄停表時間。隨著Android Wear的問世,在可穿戴裝置中開發一款這樣的App確實是個很不錯的想法,但是按照目前對於Android Wear的架構瞭解來說,似乎有些困難。所以本系列文章我們就重寫這個應用,帶領大家進入Android Wear的世界。

本文不會長篇大論地講解我們要開發的這款App的用途,因為我們在之前的系列文章已經深入瞭解過了。這麼說吧,這是一個計時類應用,在比賽開始的時候開始執行,在比賽的過程中可以暫停(停表),然後45分鐘過去後會有震動提醒,然後比賽進行45分鐘後也會有提醒。

在開始之前,很有必要先看看我們為什麼要重寫這個App而不是直接上程式碼。智慧手錶使用的是一個修改版的Android1.6的系統,所以它的架構很像一個執行Android1.6的手機,所以我們的App基於一個Activity,我們所有的工作都執行在這個Activity上。在開始學習智慧手錶開發之前,我們必須很清楚地知道,我們之前的設計在Android Wear上並不適用,儘管它也是支援Activity,但是在Android Wear上工作方式是不同的。在手機或者平板上,如果一個Activity從sleep狀態回到喚醒狀態,Activity會被重新喚醒,但是在Wear上卻不是這樣。一段時間過去後Wear裝置會進入sleep,但是在裝置喚醒後,處於sleep狀態的Activity卻不會再被喚醒了。

首先這個問題使我非常驚訝,我一直很想知道Activity有了這個限制後,還能開發實用的App嗎?後來才發現這個問題完全是多慮的,我漸漸地發現,要開發一個實用的App也很簡單——我們只需要轉變我們的軟體設計模式,使它更符合Android Wear的體系結構,而不是當做一個手機來看。

這裡我們需要考慮的最基本的問題是,這個計時應用程式需要基於一個一直執行的服務來記錄時間。但是基於長執行的服務不是一個好的方案,因為它會耗電。這裡我們提到的記錄時間這個關鍵詞,也就是說,我們並不需要真的實現一個長執行的服務,只要在使用者需要看的時候我們可以更新訊息顯示就行。在大部分的時間裡,其實使用者只需要瞭解大概過去了多長時間,只有在比賽暫停或者中場快結束的時候才需要顯示更詳細的資訊。所以在大部分的時間裡,我們只需要顯示精確到分鐘即可,然後在使用者需要的時候才精確到秒。

我們要實現這個方法的基本方法就是使用AlarmManager每分鐘觸發一次更新通知事件,去更新分鐘顯示。這個通知事件還包括顯示精確到秒的Activity,但是隻有在使用者滑動螢幕的時候才會顯示整個通知。通過這種方式我們可以在必須顯示的時候才去更新訊息,所以對大部分裝置來說,每分鐘更新一次訊息顯示比一直執行一個服務更加省電。

下圖顯示充分證明了這點,首先我們需要開啟通知,這樣就可以得到精確到秒的顯示了。

matchtimer

然而,在有資訊顯示或者裝置休眠的時候,我們只需要顯示精確到分鐘就可以了。

matchtimer_notification

matchtimer_sleep

有一件事情需要說明一下,就是這個App的名字已經改變了。之前在在I’m Watch的版本上叫做“Footy Timer”,現在改為“Match Timer”。因為在使用語音啟動App的時候,Google的聲音識別對“Footy”這個詞很不敏感,我們用“ok Google,start Footy Timer”這個命令不能啟動應用,而使用“ok Google,start Match Timer”就可以使用。

最後,很抱歉這篇文章沒有程式碼,但是本系列文章會稍微有些變動。以前本人會在每篇文章末尾附上文章相關的程式碼段,這個請放心,之後的文章還是會這樣的,因為這個是一個功能完善的App,而不是系列技術文章,所以在接下來的文章會包含一些程式碼示例和註釋,在本系列文章完結的時候會附上整個專案的原始碼。