小弟準備開始認真使用 Tumblr 了~~
第一次使用 Tumblr 已經是好幾年前了,好像是四年前的事情了吧,因為課堂上為了讓大家可以有開發 HTML5 的環境,老師就推薦了這個環境,雖然可以體驗到開發網頁的樂趣,可是當初還是覺得開發環境太麻煩,雖然可以馬上預覽,但是編輯畫面太小,真的讓我有點痛苦,之後還是回去自己用記事本寫…
這次因為工作的關係,為了幫人把網站移到 Tumblr 上,雖然聽到時覺得很扯,但是真的埋頭下去研究,發現也是沒有什麼不好,把公司的作品都做貼文在分享,Tumblr 又可以自己創建新的頁面,所有程式碼都可以自己寫,如果只是簡單的分享最近的作品也可以用內建的七種發文形式,如果覺得這裡的曝光率太低,也是可以再分享到 Facebook 其他社群網站,感覺自由度真的蠻高的。
不過說真的,一想到主題或者頁面要從頭開始寫,而且如果不符合本身使用的主題風格,看起來真的會怪怪的,而且到現在還沒研究出個屁來,不知道怎麼把主題 git 到雲端…,這份工感覺好像吃力不討好啊…
Tumblr:不專業工具人
不專業工具人
2016年5月1日 星期日
2016年3月7日 星期一
不存在的房間
今天和大學朋友去看電影,一個之後要轉攻心理學的朋友挑了這部片(不過他一開始只是不想看動物方城市而已),不管怎麼樣我們就看了這一部我覺得還蠻好懂的深度片。
簡介一下好了:這是一部關於一個魯蛇男子誘拐一名 17 歲少女,之後把她囚禁在自己的工作室內長達 7 年,第 2 年她生了一個女兒,在房間內度過了 5 年,所幸在女孩 5 歲時脫逃,之後述說逃出來之後的日子。
接下來是我自己的看法,原本是想寫的像是影評一樣,可是好像很多人寫得比我好,我就提出一些我自己的看法好了,大家看看就好。
可能是我現在在監獄服務的關係,在看這部電影的中後段時(就是傑克和她媽媽已經逃出來的部分),都會想說:這是不是很像更生人(現在我習慣叫他們同學,以下用同學稱呼)出去後的日子?
因為兩者有一些相似之處,就是他們都是被迫從一般世界隔離起來,他們都迫切的想要逃出那個『房間』,逃出後,他們都無法順利地適應這個世界,可能會有人幫助他們,可能不會,差別應該就在於外界的人對於他們到底是抱著什麼樣的心態吧!
在逃出去後的一開始,許多人都是想要幫助他們,像是警察、醫生、外婆、里奧,同學可能會遇到一些慈濟的老師,或者政府的就業輔導幫助,我覺得提供幫助的目的都是一樣的,但是世界卻不是這麼簡單,有些事情不是努力就一定會成功,但是不努力一定很輕鬆,像是傑克的媽媽開始抱怨別人、抱怨世界,開始覺得全世界只有自己是最痛苦的,一般旁人可能都可以理解,當從一個壓力很大的環境逃出來,想要的當然就是舒適的對待,想要得到一些補償,只要一點不如意,就會想要將過錯推到他人身上,或者開始抱怨自己的身世,努力學習新的世界、適應這個世界很難,抱怨卻是一件很輕鬆的事情,許多人都會選擇抱怨這一條路,但輕鬆卻是一種安樂死的行為,因為只會讓自己的生活不斷向下沈淪罷了!而同學更生成功的比例到底有多少?事實可能讓人有點絕望,不成功的原因很多,也應該都老生常談,這裡就不多說了,不希望社會大眾都可以用很健康的角度去看待這些人,只求不要把人逼上絕路。
另一方面,我覺得大人和小孩的對比相當的有趣,傑克在離開『房間』後雖然很長一段時間還是只能依賴她媽媽,可是過了一段時間後卻反過來了,傑克無法從媽媽那裡得到關注,甚至於有點被拋棄的感覺,傑克開始可以與里奧、外婆交流,好像也比媽媽更能適應外面的世界,人家常說小孩像一塊海綿應該就是這樣子吧!不斷的學習新的東西,但是大人卻空有過去豐富的經歷,可是卻開始排斥接觸新的事物,有了一些既有印象,反倒無法去適應。
除了對於未來,對於過去也是,媽媽很排斥回到原本的那個『房間』,可是傑克卻不斷問起什麼時候要回去,要說為什麼?應該很多人都有一樣的看法,就是大人已經經過學習,了解到『房間』不是一個好的地方,從各個層面而言,可是對傑克而言,那裡是她從小長大的地方,有她認識的第一號椅子、床、衣櫥、蛋殼蛇等,她媽媽也從來沒有灌輸她那裡是一個不好的地方,只是讓她學著適應那個小『房間』,可是傑克最後到了那麼寬廣的房子,又收到了這麼多的禮物,為什麼卻好像沒有以前開心?到底是什麼東西決定了傑克和她媽媽對於房間的印象差異如此巨大?同學是不是也和傑克媽媽一樣巴不得離開『房間』,而且再也不想回到『房間』內?我想答案是大家都能理解的。那我們能夠學到什麼?還是什麼都順應社會?
這部片描述了很多被囚禁者的心境,但囚禁者有兩者,彼此差異巨大,這應該就是這部片另外想要談的事情吧?
談完嚴肅的東西,現在我來讚頌一下這部片吧~這部片有很多地方我覺得都很滿意,像是完整闡釋囚禁這件事情,從一開始被關在房間內的掙扎,到逃出後的不安,最後回到『房間』告別過去,想方完整的一個故事,許多事情也符合常理(除了我想不透為什麼不能從天窗出去,還有為什麼老尼克都不想看自己的小孩),在中間看到傑克逃出房間的過程,真的是跟著一起緊張,到最後有點命懸一線,終於發生奇蹟感到開心,即使如此,故事也都還沒結束,不如說幸好沒有就此過著幸福快樂的日子真好。
另外我對於記者採訪傑克媽媽的部分也覺得真是犀利啊!先是硬要將老尼克冠上父親的稱呼,引出傑克媽媽自己說出關心小孩的人才值得叫父親,記者接著提出一個帶有隱喻的問題:難道你就有真的為小孩著想嘛?真的有的話為什麼不是讓老尼克帶她到醫院給他人扶養就好的問題,除了犀利之外,還帶有一點鼻酸,為什麼想要把小孩留在自己身邊,還會有人來指責自己?難道犧牲才可以被社會大眾認同嗎?這世界對於他人還真是嚴苛啊!
簡介一下好了:這是一部關於一個魯蛇男子誘拐一名 17 歲少女,之後把她囚禁在自己的工作室內長達 7 年,第 2 年她生了一個女兒,在房間內度過了 5 年,所幸在女孩 5 歲時脫逃,之後述說逃出來之後的日子。
接下來是我自己的看法,原本是想寫的像是影評一樣,可是好像很多人寫得比我好,我就提出一些我自己的看法好了,大家看看就好。
可能是我現在在監獄服務的關係,在看這部電影的中後段時(就是傑克和她媽媽已經逃出來的部分),都會想說:這是不是很像更生人(現在我習慣叫他們同學,以下用同學稱呼)出去後的日子?
因為兩者有一些相似之處,就是他們都是被迫從一般世界隔離起來,他們都迫切的想要逃出那個『房間』,逃出後,他們都無法順利地適應這個世界,可能會有人幫助他們,可能不會,差別應該就在於外界的人對於他們到底是抱著什麼樣的心態吧!
在逃出去後的一開始,許多人都是想要幫助他們,像是警察、醫生、外婆、里奧,同學可能會遇到一些慈濟的老師,或者政府的就業輔導幫助,我覺得提供幫助的目的都是一樣的,但是世界卻不是這麼簡單,有些事情不是努力就一定會成功,但是不努力一定很輕鬆,像是傑克的媽媽開始抱怨別人、抱怨世界,開始覺得全世界只有自己是最痛苦的,一般旁人可能都可以理解,當從一個壓力很大的環境逃出來,想要的當然就是舒適的對待,想要得到一些補償,只要一點不如意,就會想要將過錯推到他人身上,或者開始抱怨自己的身世,努力學習新的世界、適應這個世界很難,抱怨卻是一件很輕鬆的事情,許多人都會選擇抱怨這一條路,但輕鬆卻是一種安樂死的行為,因為只會讓自己的生活不斷向下沈淪罷了!而同學更生成功的比例到底有多少?事實可能讓人有點絕望,不成功的原因很多,也應該都老生常談,這裡就不多說了,不希望社會大眾都可以用很健康的角度去看待這些人,只求不要把人逼上絕路。
另一方面,我覺得大人和小孩的對比相當的有趣,傑克在離開『房間』後雖然很長一段時間還是只能依賴她媽媽,可是過了一段時間後卻反過來了,傑克無法從媽媽那裡得到關注,甚至於有點被拋棄的感覺,傑克開始可以與里奧、外婆交流,好像也比媽媽更能適應外面的世界,人家常說小孩像一塊海綿應該就是這樣子吧!不斷的學習新的東西,但是大人卻空有過去豐富的經歷,可是卻開始排斥接觸新的事物,有了一些既有印象,反倒無法去適應。
除了對於未來,對於過去也是,媽媽很排斥回到原本的那個『房間』,可是傑克卻不斷問起什麼時候要回去,要說為什麼?應該很多人都有一樣的看法,就是大人已經經過學習,了解到『房間』不是一個好的地方,從各個層面而言,可是對傑克而言,那裡是她從小長大的地方,有她認識的第一號椅子、床、衣櫥、蛋殼蛇等,她媽媽也從來沒有灌輸她那裡是一個不好的地方,只是讓她學著適應那個小『房間』,可是傑克最後到了那麼寬廣的房子,又收到了這麼多的禮物,為什麼卻好像沒有以前開心?到底是什麼東西決定了傑克和她媽媽對於房間的印象差異如此巨大?同學是不是也和傑克媽媽一樣巴不得離開『房間』,而且再也不想回到『房間』內?我想答案是大家都能理解的。那我們能夠學到什麼?還是什麼都順應社會?
這部片描述了很多被囚禁者的心境,但囚禁者有兩者,彼此差異巨大,這應該就是這部片另外想要談的事情吧?
談完嚴肅的東西,現在我來讚頌一下這部片吧~這部片有很多地方我覺得都很滿意,像是完整闡釋囚禁這件事情,從一開始被關在房間內的掙扎,到逃出後的不安,最後回到『房間』告別過去,想方完整的一個故事,許多事情也符合常理(除了我想不透為什麼不能從天窗出去,還有為什麼老尼克都不想看自己的小孩),在中間看到傑克逃出房間的過程,真的是跟著一起緊張,到最後有點命懸一線,終於發生奇蹟感到開心,即使如此,故事也都還沒結束,不如說幸好沒有就此過著幸福快樂的日子真好。
另外我對於記者採訪傑克媽媽的部分也覺得真是犀利啊!先是硬要將老尼克冠上父親的稱呼,引出傑克媽媽自己說出關心小孩的人才值得叫父親,記者接著提出一個帶有隱喻的問題:難道你就有真的為小孩著想嘛?真的有的話為什麼不是讓老尼克帶她到醫院給他人扶養就好的問題,除了犀利之外,還帶有一點鼻酸,為什麼想要把小孩留在自己身邊,還會有人來指責自己?難道犧牲才可以被社會大眾認同嗎?這世界對於他人還真是嚴苛啊!
2016年1月4日 星期一
告別 2015
還蠻感動在 2015 的最後一天還可以看到一些熟識的人,原本我應該是在要監獄內執勤的,可是不知道為什麼學長讓我排了假,讓我可以早點出來和大家見面。
沒想到最後一起跨年的是峻杰和魏華,在早些年,應該做夢也想不到是和他們度過這麼重要的節日,賭氣退出社團、刪好友,以為我們之間已經有了疙瘩,但好像都只是我在瞎操心,還記得我在之前很迷一句話:「她都賭在我身上了,我怎麼捨得讓她輸!」,只要別人對我好,我可能記不了一輩子,但一定曾經刻骨銘心過,我們之後一定還會常約出來,也把其他人也給拉回來。
2015 真的是讓我成長很多的一年,資管專案、學程造勢晚會、學程畢展、三次畢業旅行、UX讀書會,還有第一次這麼難過,在一年最後的幾個月開始當替代役,最後進了監獄(以替代役的身份),這一年做了許多以前不可能會做的事情,有些事是別人拉我做的,有些事情是一時衝動就做了,有為自己做的,有為別人做的,也有不問理由做的,過程中充滿了酸甜辣,對我現在來說都是值得回憶的,已經想不起任何令我後悔,或者我覺得讓我痛苦的事情,有些人值得等待,有些悲傷值得忍受,要說這一年最讓我充滿負面能量的一件事,應該就是我覺得當好人好難,當壞人也好難。
今年讓我成長最多的應該就非學程莫屬吧!雖然晚會和畢展的東西都是用非常簡單的原理、技術還有硬體去做出來的,可是得到的回饋讓我非常感動,還有過程中得到的幫助和關心,接受大家的關心一直是我不斷做下去的動力,所以說大家越叫我早點睡,我可能就會越晚睡(開玩笑的,大家叫我早點睡,當天都會提早睡的)。在有生之年,可以聽到我的名字可以在舞台上的感謝詞,在畢展看到許多認識的人來,有空來、放假來、特地繞過來、還有蹺班來的,感覺這些日子都是值得的,還有前幾天收信時,忽然看到有陌生人在我的痞客邦文章留言問問題,雖然這不是第一次,可是這次不小心喵到每篇文章瀏覽的人數,有的竟然多達了1500次,全站人數要破萬了,忽然覺得自己可能已經有些存在的價值,好像也往自己想做的事情一點點前進,雖然好像進度很慢就是了...
前幾天悄悄地進入了23歲,除了是新的一年,也是正式該和充滿各種幻想美好未來的自己告別的時候,明白到還有很多事情可以做,需要做,在 2015 的最後一季,踏出了自己的舒適圈,去了好多地方、認識的好多人,許多的事情也終於勇敢一個人去做,
對於23歲的自己有些期許,希望可以不要再有讓人擔心的事情發生
也有一些對於其他事情的期許,希望可以出現對的人
Ps. 之後可能會寫一些關於監獄的所見所聞,雖然快要被調出戒護區了,不過之前都有日記作為記錄,所以還好
沒想到最後一起跨年的是峻杰和魏華,在早些年,應該做夢也想不到是和他們度過這麼重要的節日,賭氣退出社團、刪好友,以為我們之間已經有了疙瘩,但好像都只是我在瞎操心,還記得我在之前很迷一句話:「她都賭在我身上了,我怎麼捨得讓她輸!」,只要別人對我好,我可能記不了一輩子,但一定曾經刻骨銘心過,我們之後一定還會常約出來,也把其他人也給拉回來。
2015 真的是讓我成長很多的一年,資管專案、學程造勢晚會、學程畢展、三次畢業旅行、UX讀書會,還有第一次這麼難過,在一年最後的幾個月開始當替代役,最後進了監獄(以替代役的身份),這一年做了許多以前不可能會做的事情,有些事是別人拉我做的,有些事情是一時衝動就做了,有為自己做的,有為別人做的,也有不問理由做的,過程中充滿了酸甜辣,對我現在來說都是值得回憶的,已經想不起任何令我後悔,或者我覺得讓我痛苦的事情,有些人值得等待,有些悲傷值得忍受,要說這一年最讓我充滿負面能量的一件事,應該就是我覺得當好人好難,當壞人也好難。
今年讓我成長最多的應該就非學程莫屬吧!雖然晚會和畢展的東西都是用非常簡單的原理、技術還有硬體去做出來的,可是得到的回饋讓我非常感動,還有過程中得到的幫助和關心,接受大家的關心一直是我不斷做下去的動力,所以說大家越叫我早點睡,我可能就會越晚睡(開玩笑的,大家叫我早點睡,當天都會提早睡的)。在有生之年,可以聽到我的名字可以在舞台上的感謝詞,在畢展看到許多認識的人來,有空來、放假來、特地繞過來、還有蹺班來的,感覺這些日子都是值得的,還有前幾天收信時,忽然看到有陌生人在我的痞客邦文章留言問問題,雖然這不是第一次,可是這次不小心喵到每篇文章瀏覽的人數,有的竟然多達了1500次,全站人數要破萬了,忽然覺得自己可能已經有些存在的價值,好像也往自己想做的事情一點點前進,雖然好像進度很慢就是了...
前幾天悄悄地進入了23歲,除了是新的一年,也是正式該和充滿各種幻想美好未來的自己告別的時候,明白到還有很多事情可以做,需要做,在 2015 的最後一季,踏出了自己的舒適圈,去了好多地方、認識的好多人,許多的事情也終於勇敢一個人去做,
對於23歲的自己有些期許,希望可以不要再有讓人擔心的事情發生
也有一些對於其他事情的期許,希望可以出現對的人
Ps. 之後可能會寫一些關於監獄的所見所聞,雖然快要被調出戒護區了,不過之前都有日記作為記錄,所以還好
2015年9月21日 星期一
Processing - 開發Android App
相信大家上網Google合併搜尋Processing和Android應該會出現這篇官方文章:Github - Processing
將USB線兩端各自插上電腦和手機,應該要可以從手機的系統通知欄看到下面訊息。
根據小弟我自己的操作後,發現有點卡卡的,後來發現是我自己的Processing版本太久,建議大家趕快更新到Processing 3,icon會變這樣:
下載連結:Processing 3
Step1:設定Sketchbook location
若你是第一次使用Processing可以跳過,若你曾安裝過其他版本,建議修改Sketchbook location,或者將舊資料夾內的資料都刪除。
選擇工具列上的Processing -> Preferences
更新新的路徑
更新後重新開啟,確認資料夾內是不是有這些檔案。
Step2. 增加Android開發模組
點擊右上角有Java字樣下拉式選單。
跳出新的視窗後,選擇Modes的Tab(頁籤),選擇Android Mode,點下右下角的Install後就會開始安裝了。
Step3. 開始開發吧!
切換到Android Mode
貼上以下程式碼:
int red = 255;
int time = 0;
int diameter = 50;
void setup() {
size(400, 400);
}
void draw() {
time = time + 1;
red = int(128 * (1 + sin(time * 2 * PI / frameRate / 20)));
diameter = int(50 * (1 + sin( time * 2 * PI / frameRate / 5))); // Change the circle's diameter with the time
noStroke();
fill(red, 0, 0, 50); // Add a 50% transparency to the color
ellipse(mouseX, mouseY, diameter, diameter);
}
這裏不解釋程式碼,可以親自到官方找各種教學,或者期待小弟我有新文章~XD
Step4. 燒錄到手機內
* 為什麼不燒錄到模擬器就好?因為很慢,不信的話可以自己試看看。
打開手機的Debug(開發者)模式。
到"設定"內的"開發人員選項",如果沒有的話,請根據各家廠牌的手機開啟此隱藏功能。之後載把"USB偵錯"功能打開。如下圖:
之後就可以回到Processing IDE(開發環境)將剛剛貼上的程式碼燒錄到Android手機內。
你有兩種方式可以使用,應該都是一樣效果的。
你可以點擊左上角的執行按鈕
或者你可以從工具列上的Sketch -> Run on Device。
Step5. 玩玩看你剛剛的作品
標籤:
Android
,
Processing
2015年9月18日 星期五
Android - 定位
若在你的APP中有使用到地圖的功能,或者是有需要取得使用者位置,你一定會需要定位的功能。
這篇提供簡單的用法,還有說明一些可能會遇到的問題和解法。
以下是完整的定位功能的程式碼,你可以在你任何想使用的時機呼叫,像是onCreate():
以上的實作過程大致是這樣:
取得裝置定位功能的服務 -> 指定你需要用什麼方式取得定位(GPS、3G網路、WiFi哪一種) -> 取得裝置位置(LatLng 經緯度的資料) -> 使用取得的位置資料做事情:移動到使用者位置、搜尋附近景點、提供推薦路線等。
在最後的地方,當你取得你的裝置位置資料 - location後,你應該要去判斷是不是空值,因為你有可能會取不到資料!原因可能是下面幾個原因:
1. 你的APP沒有要求位置的權限,應該可以在AS的logcat看到以下的訊息:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.idlefox.mymap/com.idlefox.mymap.MainActivity}: java.lang.IllegalArgumentException: invalid provider: null
所以請到AndroidMenifest.xml加入以下權限:
2. 裝置沒有開啟定位功能。
3. 就是抓不到。我之前就是在Sony手機上可以,可是在LG的手機就沒辦法順利抓到,有時要稍微等一下...
4. 還在想...
備註1:
Criteria 是一個很理想定位服務的選擇器,因為定位資料可以透過GPS、網路功能取得,打開你Android手機內建的定位功能就知道。
其中你需要注意的地方是,這段程式只會被執行一次,因為你還沒有設定如果位置改變,或者經過多久,你就要重新取得裝置位置的"事件"。
而一般在做定位的APP也只需要在一進入時獲得一次位置資料就好,除非你要提供導航的功能。
github:Android Google Map 定位
這篇提供簡單的用法,還有說明一些可能會遇到的問題和解法。
以下是完整的定位功能的程式碼,你可以在你任何想使用的時機呼叫,像是onCreate():
private void locateUser() {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); // 取得裝置的定位服務
String bestProvider = LocationManager.GPS_PROVIDER; // 指定最佳定位是用 GPS 定位
Criteria criteria = new Criteria(); // Criteria 會依照裝置的定位設定依狀況幫你取得裝置位置,見備註1
bestProvider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(bestProvider); // 取得最後定位到的位置,見備註2
if(location != null){
LatLng mylocation = new LatLng(location.getLatitude(), location.getLongitude());
Marker userMarker = mMap.addMarker(new MarkerOptions()
.position(mylocation)
.title("UserLocation"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mylocation, 15), 1500, null); // 移動到目前位置
// mMap.animateCamera(CameraUpdateFactory.newLatLngZoom("你的位置-LatLng", "畫面涵括範圍"), "移動到指定位置經過的時間", "callback function");
}
}
結果長這樣
以上的實作過程大致是這樣:
取得裝置定位功能的服務 -> 指定你需要用什麼方式取得定位(GPS、3G網路、WiFi哪一種) -> 取得裝置位置(LatLng 經緯度的資料) -> 使用取得的位置資料做事情:移動到使用者位置、搜尋附近景點、提供推薦路線等。
在最後的地方,當你取得你的裝置位置資料 - location後,你應該要去判斷是不是空值,因為你有可能會取不到資料!原因可能是下面幾個原因:
1. 你的APP沒有要求位置的權限,應該可以在AS的logcat看到以下的訊息:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.idlefox.mymap/com.idlefox.mymap.MainActivity}: java.lang.IllegalArgumentException: invalid provider: null
所以請到AndroidMenifest.xml加入以下權限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2. 裝置沒有開啟定位功能。
3. 就是抓不到。我之前就是在Sony手機上可以,可是在LG的手機就沒辦法順利抓到,有時要稍微等一下...
4. 還在想...
備註1:
Criteria criteria = new Criteria(); // Criteria 會依照裝置的定位設定依狀況幫你取得裝置位置,見備註1
bestProvider = locationManager.getBestProvider(criteria, true);
Criteria 是一個很理想定位服務的選擇器,因為定位資料可以透過GPS、網路功能取得,打開你Android手機內建的定位功能就知道。
所以很直覺的就會想說:「那我是不是還要指定取得位置資料要從哪一個方式取得?這樣是不是程式碼要一個一個去檢查,先檢查GPS,如果沒有再看有沒有網路的資料,沒有的話就GG?」
現在可以直接使用Criteria的服務,他會自己幫你選擇裝置內目前精度最好的定位資料。
備註2:
Location location = locationManager.getLastKnownLocation(bestProvider); // 取得最後定位到的位置,見備註2
而一般在做定位的APP也只需要在一進入時獲得一次位置資料就好,除非你要提供導航的功能。
github:Android Google Map 定位
Android - Google Map V2
開發工具:Android Studio
因為學弟妹最近好像都會想要在網路上找Android的Google Map怎麼開發,而網路上的好像很多都還是舊的,或者就是使用Javascript V3的教學,但是還是使用V2的好像比較好(一種Android就是要用Android的堅持)。
Step1. 開啟空白專案
因為教學方便,所以建議開啟空白專案,我有一組學弟妹因為直接開啟Google Map的專案,好像就做不下去,可能比較不適合初學者吧。
Step2. 申請Google Map的專案和Key
a. 進入此網址:https://console.developers.google.com/project
b. 建立新專案
c. 進入剛建立的專案首頁,之後選擇API和憑證,再選擇API,選擇Google Map Android API後會跳到下一頁,將API啟用。這一步驟不啟用,即使加入Google Service Key也沒有用。
進入專案首頁
選擇要開啟的API
開啟API,使"啟用API" 變成 "停用API"
d. 新增憑證,也就是幫你的APP註冊,讓你的APP可以辨識到此專案的憑證。可以參考此教學申請
你可以參考 Android - Google 新增憑證
Step3. 在Android Studio加入Google Map,此步驟就可以確認前面的步驟是否都成功。
a. 加入Google Play Service Maps到你的專案
在build.gradle加入下面的程式將google map library加入到專案內
compile 'com.google.android.gms:play-services-maps:7.8.0'
完整程式碼如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.idlefox.mymap"
minSdkVersion 11
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'com.google.android.gms:play-services-maps:7.8.0'
}
我的專案畫面
若是出現 Could not find 'com.google.android.gms:play-services-maps:7.8.0',請到SDK Manage 更新下圖中四項內容
b. 新增APP的網路Permission
在AndroidManifest.xml增加以下三行
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
c. 新增APP的位置Permission
在AndroidManifest.xml增加以下兩行
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
d. 新增Google Map需要的描述
在AndroidManifest.xml增加以下兩項
並且替換下面 "your_google_map_key"
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="your_google_map_key" />
AndroidManifest.xml完整程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.idlefox.mymap" >
<!-- internet premission-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- location premission-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_map_key" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
e. 增加Google Map到你的畫面上
在activity_main.xml加入下列程式碼
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context=".MapsActivity" />
完成以上步驟應該就可以將程式燒入你的手機或模擬器內,應該就可以看到下面的畫面,有出現地圖就是成功的。
Step4. 設定你的Google Map
Google Map 的功能大家應該都不陌生,陌生的話就可以打開手機內的Google Map App,以下是一些簡單操作就可以做出來的功能。
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.setMyLocationEnabled(true); // 右上角的定位功能
mMap.getUiSettings().setZoomControlsEnabled(true); // 右下角的放大縮小功能
mMap.getUiSettings().setCompassEnabled(true); // 左上角的指南針,要兩指旋轉才會出現
mMap.getUiSettings().setMapToolbarEnabled(true); // 右下角的導覽及開啟 Google Map功能
// 為了讓Google Map的Toolbar得以使用,所以要先建立一個Marker(地標物)
mMap.addMarker(new MarkerOptions()
.position(new LatLng(10, 10))
.title("Hello world"));
下面就是成果
常見問題:
Q1. 如果地圖是白畫面,連經緯度的線都沒事,是什麼問題?
A1. 通常是Google Map Key 沒有加,若是剛加入,經過一兩分鐘都沒有出現,請確認Key對不對。
標籤:
Android
,
Google Map
,
Google Map v2
Android - Google 新增憑證
新增Debug Key
Debug Key 是用來驗證你使用Android Studio或者Eclipse將Android 程式安裝至手機的Key,通常一台電腦的一個IDE就會對應到一個Key,而為了讓Google知道是誰要使用這個API,就要提供你的Key。(如果是要製作成APK讓其他人可以利用APK安裝,就要製作你專有的Key Store,並且為你的Key Store另外申請憑證)
Step1. 取得 Debug Key
a. 打開終端機(Terminal)
b. 輸入:keytool -list -v -keystore ~/.android/debug.keystore
c. 若需要你輸入密碼,直接按Enter就好
Step2. 進入 Google Developer Console 新增憑證
a. 進入Google Developer Console,並且選擇要新增憑證的專案
b. 進入管理憑證的頁面
c. 點擊"新增憑證"
d. 選擇API金鑰
e. 選擇 Android 金鑰
* 備註:有人說也可以看你的app資料夾下的build.gradle檔,裡面會有一個applicationId,後面的值也可以做為你的Package name,若是兩個不一樣,請以build.gradle檔為主
h. 輸入你的SHAI,你可以上面的第一步驟取得。
i. 建立,完成
新增Key Store(待補)
Debug Key 是用來驗證你使用Android Studio或者Eclipse將Android 程式安裝至手機的Key,通常一台電腦的一個IDE就會對應到一個Key,而為了讓Google知道是誰要使用這個API,就要提供你的Key。(如果是要製作成APK讓其他人可以利用APK安裝,就要製作你專有的Key Store,並且為你的Key Store另外申請憑證)
Step1. 取得 Debug Key
a. 打開終端機(Terminal)
b. 輸入:keytool -list -v -keystore ~/.android/debug.keystore
c. 若需要你輸入密碼,直接按Enter就好
SHA1就是你要的
Step2. 進入 Google Developer Console 新增憑證
a. 進入Google Developer Console,並且選擇要新增憑證的專案
b. 進入管理憑證的頁面
c. 點擊"新增憑證"
d. 選擇API金鑰
e. 選擇 Android 金鑰
f. 輸入 憑證名稱,辨識用而已,沒有什麼限制
g. 輸入套件名稱
套件名稱就是你APP的Package name,你可以在你專案下的 AndroidManifest.xml 內找到,找到package,後面的值就是你的Package Name
h. 輸入你的SHAI,你可以上面的第一步驟取得。
i. 建立,完成
新增Key Store(待補)
標籤:
Android
,
debug key
,
Developer console
,
Google
,
google api
訂閱:
文章
(
Atom
)