編輯:關於Android編程
記得在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,但是只有在用戶滑動屏幕的時候才會顯示整個通知。通過這種方式我們可以在必須顯示的時候才去更新消息,所以對大部分設備來說,每分鐘更新一次消息顯示比一直運行一個服務更加省電。
下圖顯示充分證明了這點,首先我們需要打開通知,這樣就可以得到精確到秒的顯示了。
然而,在有信息顯示或者設備休眠的時候,我們只需要顯示精確到分鐘就可以了。
有一件事情需要說明一下,就是這個App的名字已經改變了。之前在在I'm Watch的版本上叫做“Footy Timer”,現在改為“Match Timer”。因為在使用語音啟動App的時候,Google的聲音識別對“Footy”這個詞很不敏感,我們用“ok Google,start Footy Timer”這個命令不能啟動應用,而使用“ok Google,start Match Timer”就可以使用。
最後,很抱歉這篇文章沒有代碼,但是本系列文章會稍微有些變動。以前本人會在每篇文章末尾附上文章相關的代碼段,這個請放心,之後的文章還是會這樣的,因為這個是一個功能完善的App,而不是系列技術文章,所以在接下來的文章會包含一些代碼示例和注釋,在本系列文章完結的時候會附上整個項目的源碼。
Match Timer 可以在Google Play上找到:https://play.google.com/store/apps/details?id=com.stylingandroid.matchtimer
為什麼我說它是最實用的 ViewPager 指示器控件呢? 它有以下幾個特點: 1、通過自定義 View 來實現,代碼簡單易懂; 2、使用起來非常方便; 3、通用性高,大
最近項目需要,需要做一個BMI指數的指示條,先上效果圖: BMI指數從18到35,然後上面指示條的顏色會隨著偏移量的變化而改變,數字顯示當前的BMI指數,下面的BMI標准
公司項目需求,需要給軟件加入報警功能, 點擊手繪的報警圖標,開始震動,並且發出報警鈴音, 使用了layerlist,drawable,Vibrator,soundpool
在命令行[CMD]使用emulator.exe啟動Android模擬器兩種方式:- emulator -avd (AVD名稱)- emulator -data (鏡像文件