星期三, 3月 13, 2013

Google Partner Day 2013

真高興能夠有機會參與Google Partner Day活動,這是我第一次參加,今年舉辦地點在台北寒舍艾美酒店,活動著實讓我獲益良多,
活動主要分成兩個部分,Adsense和AdMob,我當然是選聽AdMob的部份

多"螢"為活動主題

寒舍酒店的場地


廣告類型和位置擺放的注意事項


Sam Lu 聊成功經驗

這張圖很清楚的解釋使用px與dp在不同解析度螢幕的差異

包含WhosCall的營運長和Sam Lu、Google代表等成員的座談


與會者的App Logo,Navier HUD也在上面

我認為其中最有幫助的是討論到如何讓自己的App被Google Play feature的部份,
雖然現在我的app還沒有被feature過,不過我有信心那只是不久之後的事情罷了(自以為..) :D
參加完活動又點燃了我的雄心壯志了

2013我們一起成長吧



星期日, 2月 17, 2013

在Android 上模擬GPS位置


最近在大翻修Navier HUD,
為了加入一些過去做不到的特色,
這些功能不是靠小改版就能處理的,
因此把過去沒加入的遺珠之憾透過這一次翻修,
整理整個架構。
Google Map也使用新版本來寫,
但在Google Map v2 API 無法在模擬器上執行,
地圖的部分會變成下圖那樣一片黑
並要求你更新Google Play Services
只是基於安全政策,模擬器是沒辦法更新Google Play Service的

本來那也沒什麼,因為只要使用實機來測試就行了,
在模擬器上執行有個好處,
就是可以使用DDMS來餵模擬器kml或gpx格式的GPS資料,
如果已經有了預先記錄好的GPS 經緯度資料,
就可以拿來測試。
一旦模擬器開不了地圖,這些GPS就沒用武之地了。

如果程式碼中沒有使用到Google API元件
可以參考此文章的作法
http://nemanjakovacevic.net/blog/2012/12/how-to-make-android-google-maps-v2-work-in-android-emulator/

但如果需要使用Google API,上面的方法就沒用拉。
既然實機不能用DDMS餵資料,
最後只好自己寫程式餵自己APP資料拉。

那在實機上怎麼餵假的GPS資料呢?
這時會需要實作一個Mock Location Provider
如下程式碼


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class MockLocationProvider {
 String providerName;
 Context ctx;

 public MockLocationProvider(String name, Context ctx) {
  this.providerName = name;
  this.ctx = ctx;

  LocationManager lm = (LocationManager) ctx
    .getSystemService(Context.LOCATION_SERVICE);
  lm.addTestProvider(providerName, false, false, false, false, false,
    true, true, 0, 5);
  lm.setTestProviderEnabled(providerName, true);
 }

 public void pushLocation(double lat, double lon) {
  LocationManager lm = (LocationManager) ctx
    .getSystemService(Context.LOCATION_SERVICE);

  Location mockLocation = new Location(providerName);
  mockLocation.setLatitude(lat);
  mockLocation.setLongitude(lon);
  mockLocation.setAltitude(0);
  mockLocation.setTime(System.currentTimeMillis());
  lm.setTestProviderLocation(providerName, mockLocation);
 }

 public void shutdown() {
  LocationManager lm = (LocationManager) ctx
    .getSystemService(Context.LOCATION_SERVICE);
  lm.removeTestProvider(providerName);
 }
}

使用下列方式來餵一個假GPS位置,如果是模擬連續收到數個GPS位置可以以一個迴圈來提供位置,並mock.wait(int milisec)來處理時間間隔

1
2
3
mock = new MockLocationProvider(LocationManager.GPS_PROVIDER, _context);

mock.pushLocation(point.lat, point.lng);

在AndroidManifest.xml需加入允許假位置的權限

android:name="android.permission.ACCESS_MOCK_LOCATION";

在測試的手機上必須在設定>開發人員選項>允許模擬位置 打勾


最後,在釋出正式版本之前,記得要註解掉假GPS部分的程式碼。

可以參考此連結文章了解http://mobiarch.wordpress.com/2012/07/17/testing-with-mock-location-data-in-android/

星期三, 1月 09, 2013

SlidingMenu開放原始碼專案

 

自從Android 3.0帶來了Fragment概念,
除了對開發者需要面對多種size的Android裝置具有正面的意義外,
讓Android Activity本來較為死板的換頁方式,帶來了更多變化,
藉由在一個Activity上自由搭配多個Fragment,
並結合越來越豐富的動畫效果,來切換不同的Fragment
愈來愈多絢麗的頁面切換效果也逐漸出現在Android app上。

其中最常見到,具有豐富視覺效果的切換特效非SlidingMenu莫屬,
SlidingMenu效果可以在Evernote或是feedly兩個我個人常用的軟體中見到。
使用SlidingMenu藉由兩個Fragment間(也可以是兩個ViewGroup)的滑行效果
來切換介面。

SlidingMenu Open Source Project

要實現這樣的效果需要自己設定許多Animation 的參數,
藉由盧育聖(ysl程式設計天堂部落格作者)的粉絲頁分享,
才知道這樣的效果已經有別人寫好,並開放原始碼與其他開發人員共享,
在GooglePlay上有一個使用範例可以在下方連結中下載
SlidingMenu Demos

如果你也想在App中呈現這樣的效果,
不需要自己造輪子,
可以在GitHub上找到完整開放原始碼專案。
SlidingMenu 開放原始碼專案

整合到你的專案

要將SlidingMenu整合到你的專案當中,
需要下列幾個步驟:


將開放原始碼專案下載下來,並匯入Eclipse當中。(在這之前你應該要裝好了Andorid 開發環境)其中會兩個Project,SlidingMenuActivity是主要我們要使用的部份,另一個ExampleListActivity是上述Google Play中可以下載的到的SlidingMenu Demo專案。不妨把兩個專案都載入,這個Example專案可以讓你了解該怎麼使用這個原始碼專案。



因為專案中有提供MapActivity所以Android SDK需選擇有Google APIs的版本,載入專案之後先進行Project > Clean的動作,以產生必要的R.java檔。
如果您的專案只支援3.0以上的版本,引用SlidingMenuActivity專案之後(在Package Explorer中,選擇ProjectName按下右鍵 > Properties > Android > Library > Add ),在您的專案裡就可以使用當中所提供的SlidingMenuActivity了。

Example 專案

如果你想要測試Example專案,這時應該還存在著錯誤,因為這個Example專案在Fragment和Action Bar的部份是使用Support Library來支援的,因此我前面才說,如果你專案只支援Android 3.0以上,那就不需要接下來的動作。
但如果你的專案必須支援Android2.X甚至到Android1.6以上,那我們還需要進行一些設定。

匯入ActionBarSherlock Open Source專案

下載並在Eclipse當中匯入ActionBarSherlock專案,這個專案主要讓所有的Android版本都能夠使用只有在Android 3.0以上才支援的Action Bar的功能。其中有數個sample專案,但我們只需要匯入library這個專案(除非你想深入了解ActionBarSherlock要怎麼用)。

在SlidingMenuActivity當中引用ActionBarSherlock專案。 


因為Example專案當中使用了SlidingFragmentActivity,因此需要將SlidingFragmentActivity做些修改,以支援Android3.0以下的版本。

修改SlidingMenuActivity中的SlidingFragmentActivity.java
將原本extends FragmentActivity改成SherlockFragmentActivity
完成後做一次Project > Clean,之後Example專案就可以順利執行了。

透過這個Example專案,可以很輕易的了解如何使用SlidingMenu 專案,並製作出很具視覺效果的滑動切換頁面動畫了。







星期一, 9月 24, 2012

Navier HUD新的介紹影片

前幾天剛完成的音樂,(音樂製作部分參考這裡)
今天就拿來做新的影片,
兩分鐘的影片,我做了八個多小時才完成,
累翻了~~





星期日, 9月 23, 2012

GarageBand - Let's rock & roll


首先,向每個獨立軟體開發者至上深深的敬意!
因為獨立軟體開發者們實在是太強大了,(感覺良好中)
在其他有正式編制的公司,或可以有數名夥伴的軟體開發者,
可以找來有美術專長的人才,來負責美美的軟體和網頁介面,
也可以找來具有音樂專長的人才,來負責合適各個種情況的音樂,
有時候還需要具有影片編輯專長的人才,做出漂亮的商業影片!

獨立軟體開發者,所有事情一手包辦,
上從軟體Coding、網頁設計一直到宣傳影片、海報、音樂,
全部自己來,不過這也沒辦法,
誰叫我們那麼強大什麼都會XD
以後就算不做獨立開發者,去業界工作,
薪水也要要求從八萬起跳才行(謎:卡早睡才有眠,不要再做白日夢了)

好吧,正經一點,
我要跟各位介紹當有音樂需求時,怎麼快速製作出超IMBA的背景音樂!(謎:IMBA都拿出來用了,可見有多厲害)
主角是GarageBand:一套簡單操作,卻又超強大的音樂軟體,

先等等,在這之前先說明一下來龍去脈,
獨立軟體開發者什麼時候會需要自己製作音樂呢?
如果您是Android 或 iOS開發者,總免不了要做一些自己App的介紹影片吧!
當然你可以選擇放棄這個非常有用的宣傳工具,
只因為你沒辦法獨立剪輯出一個有基本水準的宣傳影片,
但你現在只要有手機、相機可以錄影,再加上簡易的編輯軟體,
都可以簡易的做出影片,
所以你不該放棄這麼棒的宣傳工具,畢竟人們是視覺的動物,
況且影片放在Youtube上還可以賺廣告費(這真是太神奇了)

既然要編輯影片,並且同時賺取廣告費,
你可能會遇上最大的困難點,可能就是背景音樂!
一部好的宣傳影片是不可能不需要背景音樂的,
因此Youtube在今年提供了AudioSwap功能,
讓你可以簡易的把上傳到Youtube的影片,
從資料庫當中挑選一個合適的背景音樂,
從此你的影片就會有超美妙的配樂!

正想稱讚Google 大無私的為影片提供者提供這麼棒的服務時,
仔細看一下使用AudioSwap的條件,
如果影片使用了AudioSwap置換了背景音樂,
就等於宣告了,放棄使用這支影片賺錢的權力!
廣告賺錢的獲益者變成是提供背景音樂的人囉~
哇~那有了再好聽的背景音樂,如果不能賺錢,
身為強大的獨立軟體開發者當然不能忍阿~

但我們又不是天才,剛好會打爵士鼓,剛好又會彈貝斯,剛好又會電子琴,
只會彈彈吉他的四大和弦就該偷笑了,
於是只好請出GarageBand來,幫助我們無腦做出好音樂!


GarageBand 內建在每台MAC電腦當中,是免費軟體(但是要先買mac  Orz..)
但很多mac使用者可能連碰都沒碰過,或跟不知道他這麼容易用!
甚至可以使用GarageBand來教你彈吉他或彈鋼琴,
我們把重點放在製作Loop背景音樂的功能上!

開啟GarageBand之後建立一個新計畫案,選擇Loops的計畫案


設定儲存檔名與拍子、速度和音調,這部份製作時可以修改

操作畫面如下,右方是GarageBand所提供的Loop clip篩選器,
藉由篩選器可以快速幫助你找到合適的音軌,也不需要擔心版權問題。
只要將挑選喜歡的音軌拉到中間深灰色的部份即可建立移到音軌。
最下方則是一些參數的調整。


在開始前,先稍微規劃一下你的音樂配置,
首先我希望我所製作的音樂節奏速度為接近hiphop的音樂類型,
因此我將拍速設定為98(預設120),且使用A大調,
設定方法是在下方面板選擇計畫案>拍數 使用滑鼠滾輪來調整
您可以多測試適合您的音樂設定。

通常音樂都會有三個主要的音軌,就是節拍、低音或和弦及主旋律,
因此我也將我的專案規劃為簡單三個音軌,
通常先由節奏來找起。通常節拍的樂器大部分是由鼓來呈現的,
所以只要透過右方的篩選器找到適當的鼓節奏拉到中間來即可。


我找到了RnB beat' 06 這個音軌,並打算全部使用這個鼓節拍來貫穿整首,
我預計這段音樂需要有32個小節,這個鼓節拍長度是8小節,
因此我將其複製了四次(按著alt+滑鼠右鍵拖曳即可複製)

接著低音(根音)基本上會使用較低沈的樂器,如貝斯,
因此我也挑選了一組bass音軌Funky Pop Bass 06 來貫穿整首,
但貝斯我打算由第四小節才開始進入,之前只會有鼓聲。

最後的旋律部分則需要較多的變化,不像節奏與低音可以使用一個clip貫穿整首
因此挑選了幾個吉他音軌Acoustic Picking 06 等來做為主旋律,
編輯方式都和鼓組相同,只要拖曳與複製就可以了。
需注意的是Bass和主旋律的和弦要有一致才行 Orz...

若和弦不一致聽起來會很奇怪!!如果你不了解和弦
那...你還是可以只憑藉你天生的音樂細胞,
自己來決定好不好聽。


完成後只要由共享>輸出到磁碟就可以把你的作品存為mp3囉!
如果你夠熟悉這個軟體,那前後可能不需要二十分鐘,
就可以完成一首夠水準的背景音樂囉~

獻上我的作品如下,弄的還不錯吧哈哈(得意中)

作品成果



如此一來,我們自己的影片就可以搭配上自己做的音樂,
不需要再去找可能侵犯到版權的音樂片段囉!酷吧~

星期四, 9月 20, 2012

Google Checkout 開始提供台灣開發者電匯服務


一直以來台灣開發者在開發付費程式時,都需要多申請一個Adsense帳號來領取款項,這個情況就快要改變了! 今天(2012/09/20)收到了來自Google Checkout的通知,巴西、俄羅斯、阿根廷、台灣在下個月完成最後一次透過Google Adsense帳號來取款後,會改為帳號電匯的方式,不需要將Google Checkout和Adsense綁在一起了。

透過Adsense來取得款項有甚麼不好呢? 首先須了解Adsense原本的作用。Google Adsense提供給網頁、部落格的經營者一個可以放置圖文廣告來賺取金錢的途徑,網頁經營者經過Google 審核之後,即可以在網頁中放置廣告,當使用者點擊後就可以獲得一些金額,這些金額是透過廣告主競標的方式來決定的,除了點擊計價之外,每千次廣告瀏覽,也會提供給網頁經營者一些利潤。這樣看起來也沒甚麼不好,但問題就在於寫Android app 的開發者,不一定會經營部落格。

Android app的付費購買獲利通通需要透過Google Checkout來收費,過去沒有直接電匯服務的時候,在台灣的開發者還需要Adsense帳號來收取這筆款項,所以...這是逼Android的開發者一定要去搞網頁寫自己的部落格,否則你申請不到Adsense帳號,就收不到錢! 並且在後面幾年,Adsense帳號資格越來越嚴格,不是說隨便寫幾篇文章的部落格,就可以申請過。申請Adsense的網頁必須要內容豐富,並且要成立一段時間才行。這樣不合理的設定,讓許多有心成為Android開發者的人,設下了一道牆。請先成為部落客,不然Android上賺的錢你就拿不到~

即使申請到了Adsense帳號,你還要成天擔心這個Adsense 帳號會因為久疏於經營或是有心的使用者違規亂點(單一使用者點擊多次)你的廣告,而遭到停權! 所以申請到Adsense帳號,我可以不用不放置廣告嗎? 也不行! 因為申請Adsense的條款與政策就提到不使用Adsense可能導致停權的後果。

所幸,Google已經聽到了許多來自台灣等地區的開發者心聲了,終於開始開放直接電匯的方式,直接將Android的所得匯到開發者所指定的帳戶! Android上的收益再也不需要透過Adsense來領取了。

於是在這個大App時代,只要有心人人都可以成為開發者!! 一起來成為Android開發者吧~

星期四, 9月 13, 2012

Android 開發過程中的 "Dirty hack"

最近一直在讀一些Open source的程式碼,
為了實現我在未來所要完成的一些工作和想法,
有時候很佩服這些願意把程式碼分享給其他人的程式設計師,
至少在目前我還很小氣的不想把程式碼分享給其他人Orz,

應該很多人和我一樣,覺得讀別人的程式碼很痛苦,
但是讀這些程式碼真的會讓寫程式的功力和邏輯想法變得不一樣,
況且這些願意分享的Open source專案的作者,
也都有一定的實力與經驗,才有勇氣把自己的程式碼放出來,
很難想像如果我把自己的程式碼攤在大家面前時那是什麼感覺,
可能一堆人"幹譙"說寫這麼爛也敢拿出來,
或者根本就沒人對我的程式碼有興趣XD

我在這份開放原始碼的專案中,
其中一行註解看到了Android開發者的無奈XD


作者為了HTC Flyer做了一些客製化的程式碼,
然後在程式碼上方註解 "//dirty hack for the HTC Flyer"
看起來是HTC Flyer在觸控事件發生時所傳回的MotionEvent上,
沒有提供足夠的觸控資訊,通常裝置可以粗略判斷觸控的物質是手指、觸控筆或其他,
並將此資訊提供給程式進行接下來的邏輯運算,
顯然HTC Flyer的感觸Sensor沒有把這個資料正確的回傳,
最後只能作者自己想辦法~

其實我一開始並不知道Dirty hack實際的意義是什麼,
於是上網Google一下在這個簡體網站舉了例子,
做了精闢的字義說明!



想必看完之後會發現,
原來許多在Android開發過程所寫的程式碼就是在做Dirty hack,
因為Android裝置廠商眾多,
實在沒辦法確認所寫的Code真的能在所有裝置上面順利運行,
有時候真的要等到有使用者在評分版上抱怨的時候,
開發者才會知道,原來這款手機會有問題,
但即使知道了有問題,如果開發者手邊沒有這款手機,
那開發者有80%的機率還是沒辦法知道發生問題的原因,
因為別款手機都沒問題阿ˊ__ˋ

如果手邊有發生問題的手機,開發者就可以為這些手機量身訂做解決方案,
也就是上面說到的"Dirty hack" ~ ~a

在寫Navier HUD時就有發生部分手機在利用Android API取得GPS座標時,
竟不會同時回傳速度,
遇到這種時候只好自己利用兩點距離和時間自己算速度才有辦法解決了,
下次我一定會記得在這些Code上面註解這些是"Dirty hack" XDD

所以各位App愛用者,
要購買App前一定要先確認是否在您的手機上會有問題,
當遇到App某些功能在您的手機上運作不正常時,
如果那個App是免費的,請記得評分時手下留情Orz
並記得寫信告知作者您的手機型號和問題!
請體諒Android App的作者沒辦法購買所有的Android裝置來測試呀~



星期五, 8月 31, 2012

Android Asset Studio 網頁介紹 (二)


續前篇Android Asset Studio網站製作ICON的介紹,該網站也可以協助我們製作擬手機畫面的螢幕截圖邊框。

當我們完成一個App之後,第一個吸引使用者去下載App的方式便是提供程式操作畫面,一般來說,我們只要在Android手機上同時按下電源鍵+音量減低鍵就可以將目前手機上的畫面取下,但此時我們所剪下的畫面為單純的螢幕截圖,如果能拍下包含手機的畫面,則使用者會更有真正操作手機時的想像空間。


這時,我們可以利用相機來進行手機畫面拍攝,但拍攝玩的畫面可能會有去背或修整後製的需求,導致耗時費力。這時,我們可以利用手機的截圖畫面加上Android Asset Studio上面的Device Frame Generator工具來產生美麗的操作畫面,也不需要自己處理影像。

第一步驟,執行App並將畫面切換到要擷取的畫面中,手機同時按下電源鍵+音量減低鍵,取得螢幕截圖,將手機連接電腦將螢幕截圖取出至電腦中。

第二步驟,將截圖照片檔案拖曳到網頁中所支援的手機圖示上,就可以立刻將螢幕截圖嵌入手機的邊框當中,迅速做出漂亮的手機App運行畫面,並且可以調整陰影和螢幕光影反射。

只要簡單的兩個步驟,就可以做出比之前自己使用photoshop所合成的運行畫面品質還好的圖片,只是要注意的是所提供的螢幕截圖必須符合該手機的解析度,譬如筆者以Galaxy Nexus來截圖,則原始的圖檔可以直接拖曳到Galaxy Nexus圖示上,卻不能拖曳到其他解析度不同的裝置當中。目前該工具所支援的裝置有八台目前較暢銷的機種。善用此工具可以幫開發者節省不少時間呢!

Android Asset Studio 網頁介紹



個人軟體開發者,常會遇到的問題之一,常常是需要花許多時間來設計與處理App 使用者介面所需要的圖式,這些圖示包含軟體執行的icon、按鈕icon、提示icon、menu和tab上的icon、以及各式背景等。如果你說撰寫的app還需要支援各種不同的螢幕解析度,那這些事情又更複雜了。由沒有什麼工具是可以協助使用者同時簡化這些圖示設計工作,也可以產生簡潔又美觀的介面呢?

android-ui-utils 計畫,就在協助開發者們,關於介面圖示與背景的建立與產生。


Android Asset Studio 網頁連結

Android Asset Studio 網頁提供了ICON Generator工具,Other Generator工具及Community Tool三個項目。ICON Generator可以協助開發者建立大大小小的圖示,並且這些工具的操作也大同小異,讓你可以在幾個選項之間就產生了各式大小的圖示,如果你有使用Eclipse來開發Android手機程式,你會發現Launch ICON Generator被整合到Android 開發工具當中了,利用這個工具你就可以快速產生一個Launch ICON。
ICON Generator 當中除了Launch ICON Generator還有Action bar and tab icon、notification icon等等,你可能會覺得我的App要有獨特的ICON才能顯示出與眾不同的特色,但有時候如果一些常用的圖示能夠讓使用者一看到,就了解功能,例如下列幾個圖示

我們何苦去挖空心思,設計這些習已成俗的線條與圖示呢?我們要做的只是將這些ICON轉換成合乎App色調與背景的圖示就行了。使用者也不需要再猜想這些按鈕是什麼功能,由既有的軟體使用經驗就可理解這些功能了。

至於Android Asset Studio該如何使用呢,以Launch ICON 產生器為例



第一步驟是選擇圖示的來源,可以重上傳既有image檔案,或是點選CLIPART選擇一個既有的圖示,另外也可以由TEXT以輸入的文字來當做圖示

製作過程中,可以調整的選項包含前景與背景顏色、前景圖示的透明度、邊框空間、背景形狀等等。調整後,網頁會自動產生適合不同大小的圖示,可以選擇直接儲存zip檔,或直接產生合適的網頁格式。

其他icon的產生方式也同  Launch ICON  的產生方式類似,只要以滑鼠選擇適當設定之後,就能產生符合各種解析度的圖示了。



星期一, 7月 23, 2012

Eclipse Color Themes plug-in



你也和我一樣一天到晚和 Eclipse IDE 為伍,

每天在程式碼的海中游泳嗎?

從開始成為Android app開發者開始,

我幾乎每天都要打開 Eclipse 來寫程式,

有一天我突然想到,我每天都要這樣長時間盯著白色光亮背景的編輯畫面,

其實對眼睛是非常傷的事情,

如果Eclipse背景可以改成其他深顏色就更好了。

因此我就在Eclipse偏好設定裡找相關的顏色設定,

希望把背景色調成黑色,

您可以在Eclispe>偏好設定>General>Appearance

當中進行背景、文字顏色的設定。


於是當我將背景顏色改成黑色後,發現字也是黑色,

因此Code全部都看不到了Orz,

所以後改了Code的顏色,又發現註解的顏色不適當,

如果你很有耐心,決心要改一個適合自己的顏色配置,

我保證,你這樣要設好,至少得花一整天的時間!

真的是「痛苦太多,而收穫太少」阿!


所以我要介紹你一個Eclipse好用的外掛,

可以用來拯救你的靈魂之窗的外掛!

當當當當 ~~就是「Eclipse Color Themes」!!


你可以在官方網站看到很多已經完成的顏色配置!

網址http://eclipsecolorthemes.org/

你要做的就是在你的Eclipse當中安裝這個外掛,

然後再網站裡挑一個你看起來最順眼的配置就行了!

Step 1 :

在Eclipse>Help>Eclipse MarketPlace搜尋「Eclipse Color Themes」

按下Install安裝它!

Step 2:

在網站裡選一個你喜歡的顏色配置,

點進去並下載該配置的Eclispe Preference檔案,

接著到 Eclipse>Files>Import>Preference 

選擇下載的epf檔,之後就大功告成了


外掛其實已經有附一些配置可供選擇

只要到 Eclipse>偏好設定>General>Apprearance>Color Theme 當中選擇就行了

如此一來就不用花時間在顏色配置上,

又能依照心情變化顏色的配置囉!

改完顏色之後,是不是眼睛感覺到爽快多了呢?

我的工作環境改完後就變下面這樣啦! 真是太棒了呢!




星期二, 7月 17, 2012

上路測試Navier HUD新元件



上路測試一些Navier HUD中的新元件

版面配置為右邊是「路線指示」和「導航進度」

版面配置左邊包含「數位速度表」、「平均速度」、「加速度動態圖」、「gps狀態圖」和

「大速度動態圖」^__^

測試影片提供給各位參考!

背景音樂為Secrets In Stereo : Again

星期四, 7月 12, 2012

ViewFlipper Bug

因為有部分手機車架設計的關係,

有些車架電源接口朝左,有些朝右,

又因為Navier HUD是強制將畫面設定為Landscape
(android:screenOrientation ="landscape")

這時如果車架電源接口是朝左的話,

Navier HUD畫面會變成上下相反,

解決這個問題的方法,本來很單純,



就是把畫面設定改成 android:screenOrientation ="sensorLandscape" 就行了

問題是,sensorLandscape參數只支援Android2.3以上的版本,

2.3以下的版本會變成沒有將畫面鎖為橫向!


所以...我該為了這個參數放棄使用Android2.3以前版本的使用者嗎?

不,我一個使用者都不想放棄!
觀察Navier HUD的使用者版本分布,

仍有接近八分之一的使用者是Android2.3以前的版本

所以只好另外想辦法!

既然沒辦法在Manifest檔中使用參數,

那就直接在Activity的onResume()時,檢查手機的手持方向,

然後hardcode轉換顯示方向


public static void checkLanscapeOrientation(Activity context){
       Display display = ((WindowManager) context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();

try{
if(orientation==Surface.ROTATION_270)
{
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}else{
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}catch(Exception e){
}
}


將上述方法放置於onResume()當中,來改編顯示方向

本以為應該沒有問題了!

無奈又碰上ViewFlipper 元件的Bug

當Activity當中有使用ViewFlipper時,做Orientation改變時,

可能會使App FC!

這個錯誤由Android2.1~ Android 4.0都還有,

Android 4.1似乎解決了,因為我手機刷了Android 4.1並且沒碰到這個問題,

所以我一直沒發現有問題,直到許多人在評論上提到,

我才知道ˊˋ


目前只好再把Orientation設回landscape,

對那些車架電源接口是朝左的使用者說聲抱歉@@

目前還無法解決此問題!

星期一, 6月 25, 2012

MapView in multiple activities

在開發Android App時,可以非常簡便的來開發與使用地圖,

只要import com.google.android.maps 當中的相關元件就可以了開心使用,

但因為MapView是很耗記憶體的元件,

因此Google在設計MapView時,將MapView設計成

所有使用到MapView的Activity會參考到同一個MapView資源,

使用同一塊快取記憶體,以避免大量的記憶體使用造成的Memory leak。

所以在你所開發的程式中,所使用多個MapView其實都參照到同一個

不同只在於你在MapView上所加的Overlay不同、控制器不同、zoom等參數不同而已。

原本立意良善的設計,有時卻會帶來意外的困擾,

在Navier HUD當中使用到MapView的Activity目前有兩個,

一個是使用者可以在地圖上點選建立目的地的地圖,













另一個是顯示搜尋結果的地圖,







在舊的版本中(v1.3.1及之前)當您搜尋一個地點進入搜尋結果後,

在以back鍵回到目的地地圖時,

這時拖拉地圖,會發現地圖下方有一點不正常的顯示情況(地圖閃爍且看到背景)

原本應該是填滿地圖的畫面,在拖拉時變得顯示不正常了。

經過一天一夜爬文,可以確定造成此錯誤的原因就是,

雖然在兩個Activity當中引用兩個MapView,

但是因為兩個Activity當中的排版有些許差異,

因此在回到第一個畫面時還帶著第二個畫面的MapView排版屬性。

這裡複習一下Activity的生命週期,當由第一個Activity進入第二個Acitivity時,

第一個Activity會呼叫OnPause(),並將Activity放置在Activity Stack當中,

直到由第二個Activity返回時,

由Stack中取回狀態並呼叫OnResume()回到第一個Activity。

而通常我們會把設定畫面layout的程式碼setContentView()擺在onCreate()當中,

所以在OnResume()時並不會重新讀取MapView的Layout,

因為共用MapView的關係,回到畫面1時還帶著畫面2的Layout參數,

而造成畫面看起來不正常。直到使用者用兩指縮放地圖後才會正常。

解決這個問題最快的方式可以將兩個Activity的MapView長寬都設成match_parent,

但這樣設在Navier HUD會造成畫面2的FlipView處理OnFling()異常,

可能要修改排版方式才能解決Orz,

但最後終於自己試出一個最快最方便的解決方式,

連排版都不用變更,

就是在畫面1的OnResume()時,將MapView的visibility設為GONE,

然後再設回VISIBLE,地圖就會重新處理Layout,

結果就正常顯示了。


mapView.setVisibility(View.GONE);
mapView.setVisibility(View.VISIBLE);



此錯誤會在下次更新時修正(v1.3.2)

星期一, 6月 18, 2012

Navier HUD 的地點管理介紹


在Navier HUD 中選擇一個導航面板之後,

畫面會來到目的地選擇地圖,

這個畫面當中包含了Google 地圖、左下方四個按鈕、

右下方一個地點文字搜尋以及地點語音搜尋按鈕。

使用者可以直接在地圖上利用兩指縮放與拉動來找到您的目的地,

只要點一下地圖,就會在這個地點插上旗子,作為目的地。

藍色小圓點則是使用者的目前位置。

當插上旗子後,上方會出現關於這個地點的大約地址

這個地址可能會有錯誤,不過只要您確認位置是正確的就不需要在意。



目前位置按鈕


預設情況地圖中央會對準並固定在目前位置,

也就是當你移動時地圖也會同時移動,

總之你的位置會固定在地圖中央,

但當拖動或縮放地圖後,就會取消將目前位置固定在地圖中央,

這時只要按下左下角第一個按鈕,

就會立刻回到目前位置。


目的地位置按鈕


當地圖上插上旗子後,就可以隨時按下目的地位置按鈕查看旗子插在哪裡。



地點文字搜尋

除了由地圖上找以外,也可以例用關鍵字來搜尋地點,

只要在放大鏡圖示左方的文字輸入區域輸入地點關鍵字,

就會幫你找出與你目前位置最相近的幾個符合關鍵字的地點。

你可以輸入如:台北101、便利商店、加油站或中山北路等形式

系統會幫你找出離目前地圖中心點最近的地點,最多八筆資料。

並且將結果標示在地圖上。



你可以利用手指左右滑動下方地點資訊,來找到不同的地點,

利用星星+的按鈕可以將此位置記錄到我的最愛當中。


地點語音搜尋

在駕駛過程中,可能不方便打字,

可以利用語音的方式說出關鍵字,來進行地點搜尋,


我的最愛

當你將地點設成我的最愛後,可以在我的最愛當中看見,


只要在地點項目上長按,就可以進行編輯名稱或刪除地點的操作。

只要善加利用我的最愛,就可以將常用的目的地建立於其中,

這些目的地可以綁定你在程式中所選擇的Google帳號,

當你有新的Android裝置時,只要使用同樣的帳號,

就可以取回我的最愛地點列表。


直接點選地點項目則啟動導航到此地點。

歷史紀錄

這裡記錄著您曾經導航過的地點,

你可以經由長按地點項目來進行重新命名、刪除、

將地點設為我的最愛、以及刪除全部幾項工作。


直接點選地點項目則啟動導航到此地點。



透過這些功能,你就可以簡單的紀錄常用到的目的地囉!

星期五, 6月 08, 2012

Navier HUD change log

Localization

  • English (Supported by Martin Vrieling )
  • Dutch (Supported by Martin Vrieling )
  • Portuguese  (Supported by Rafael Rosário )
  • Czech (Supported by Oldřich Havlík )
  • TURKISH (Supported by Özgür KAYA)
  • GREEK (Supported by John Souroufis)
  • SPANISH (Supported by Hernan de Soto)
  • POLISH (Supported by drblade)
  • ITALIAN (Supported by Luca Tornatola)
  • RUSSIAN (Supported by Сергей Рязанов )
  • FRENCH (Supported by Antoine Cadoret )
  • GERMAN (Supported by Marc Hillesheim )
  • ARABIC (Supported by Majid AL-Dharrab)
  • SLOVENIAN (Supported by popotnik)
  • CROATIAN (Supported by Damir Karic)
  • FINNISH (Supported by Markku Lahti)
  • 繁/簡中文 
If you can help me to correct/translate UI description to your native language, please contact me by the following e-mail lu.shangchiun@gmail.com

---------------------



 Latest update

@ 2.3.5

  • - Minor bug fixes
  • - Add three premium-only parts, include 3D ROUTE, ROAD NAME, WIDE_ROUTE_DIRECTION, DISTANCE_TO_TURN
  • - Route re-plan issue has been fixed


    星期四, 6月 07, 2012

    如何購買SVOX合成語音引擎



    如果你在看完Navier HUD 中文語音安裝教學

    這篇教學後試用了30天覺得SVOX搭配Navier HUD或其他軟體,

    用起來感覺還不錯,還想聽到"勻"(注音找不到這個字@@)的聲音

    想要購買SVOX的話該怎麼購買呢?

    可以使用Android Unlocker這個App來騙過Google Play在台灣的購買限制。

    (感謝Mobile01上jesse6617和sleeper指導)

    首先要先找到Android Unlocker 這支App,雖然已從google play下架

    但善用google並不難找到,

    安裝前先確認您的手機已經有Root權限,

    由於各手機Root方式不盡相同,請看倌們找google幫忙,

    在此不贅述root方法。

    1. 手機root

    2. 安裝Android Unlocker

    3. 將手機切為飛航模式

    4. 只開啟Wifi連網(無3g)

    5. 清除Google Play 資料(設定> 應用程式> Google Play 商店> 清除資料)



    6. Android Unlocker當中開啟Enable Unlocker 和Auto Unlock兩項


    7. 接下來回到Google Market就可以看到付費軟體囉


    註:我的手機Galaxy Nexus原本為4.0.4版,當時裝Market Unlocker一直無法作用

    後來爬文,有人說SuperUser在4.0.4似乎會無法作用,於是我將Android版本刷回三星官方

    4.0.2版之後就可以使用Market Unlocker了,給各位看倌參考。