Skip to content

Seethrough_ProjectBlog

yeong-jpg edited this page Dec 4, 2017 · 92 revisions

์‹œ๊ฐ์žฅ์• ์ธ์„ ์œ„ํ•œ ๋ฒ„์Šค๋„์ฐฉ์•ˆ๋‚ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

์”จ์Šค๋ฃจ ํŒ€ | ์œค์ง€์˜, ์ดํ˜„์ง€


๋ชฉ์ฐจ

์„œ๋ก 

  • ๋ฌธ์ œ์ •์˜
  • ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ
  • ์‚ฌ์šฉ์ž ์˜ˆ์ƒ ์กฐ๊ฑด

๋ณธ๋ก 

  1. ์ ์šฉํ•œ ๊ธฐ์ˆ 
    1. GPS๋กœ ํ˜„์žฌ ์œ„์น˜ ์ธ์‹
    2. ๊ณต๊ณต๋ฐ์ดํ„ฐ API ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    3. Google Speech๋ฅผ ์ด์šฉํ•œ ์Œ์„ฑ์ธ์‹ ๋ฐ ์Œ์„ฑ์•ˆ๋‚ด
  2. ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ ์ˆœ์„œ
  3. ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

๊ฒฐ๋ก  | ์š”์•ฝ


์„œ๋ก 

[๋ฌธ์ œ์ •์˜]

์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์—์„œ ๋ฒ„์Šค๊ฐ€ ๋„์ฐฉํ•œ๋‹ค๋Š” ์•Œ๋ฆผ์„ ์Œ์„ฑ์œผ๋กœ ๋“ค์€ ๊ฒฝํ—˜์ด ํ•œ๋ฒˆ์ฏค์€ ์žˆ์œผ์‹œ๊ฒ ์ฃ . ํ•˜์ง€๋งŒ ์ตœ๊ทผ ํฌํ•ญ์‹œ์—์„œ๋Š” ์‹œ๋ฏผ๋“ค์˜ ๋ฏผ์›์œผ๋กœ ์ธํ•ด ๋„์ฐฉ ์ •๋ณด์˜ ์Œ์„ฑ ์•ˆ๋‚ด๋ฅผ ์ถ•์†Œํ•˜๊ฑฐ๋‚˜ ์ค‘๋‹จ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•„์‹œ๋‚˜์š”? ํฌํ•ญ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ช‡๋ช‡ ์ง€์—ญ์—์„œ๋„ ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด๋ฅผ ํ™”๋ฉด์—๋Š” ๋„์šฐ์ง€๋งŒ, ์Œ์„ฑ์œผ๋กœ ์•ˆ๋‚ดํ•˜๋Š” ์„œ๋น„์Šค๋Š” ์ผ๋ถ€ ์ค‘๋‹จ๋˜์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๋ฏผ๋“ค์€ ์–ด๋–ค ์ด์œ ๋กœ ๋ฏผ์›์„ ๋„ฃ์—ˆ๊ธฐ์— ์Œ์„ฑ ์•ˆ๋‚ด ์„œ๋น„์Šค๊ฐ€ ์ถ•์†Œ ํ˜น์€ ์ค‘๋‹จ๋˜์—ˆ๋˜ ๊ฑธ๊นŒ์š”?

1

์‹œ๋ฏผ๋“ค์ด ๋ฏผ์›์„ ๋„ฃ์—ˆ๋˜ ์ด์œ ๋Š” ๋ฐ”๋กœ ์†Œ์Œ ๋ฌธ์ œ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„์žฅ์• ์ธ ์‹œ๋ฏผ๋“ค์ด ์‹œ๋„๋Ÿฝ๋‹ค๋Š” ์ด์œ ๋กœ ์Œ์„ฑ ์•ˆ๋‚ด ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ฑฐ๋‚˜, ๋ณผ๋ฅจ์„ ์ค„์—ฌ๋‹ฌ๋ผ๋Š” ๋ฏผ์›์„ ๋„ฃ์€ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ์žฅ์• ์ธ ๋ฐ ์ €์‹œ๋ ฅ์ž๋“ค์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ณด๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์Œ์„ฑ ์•ˆ๋‚ด ์„œ๋น„์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์ „๋ถ€์˜€๋Š”๋ฐ์š”. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ ๋•Œ๋ฌธ์— ์‹œ๊ฐ์žฅ์• ์ธ๋“ค์€ ๋ฒ„์Šค๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ ํฐ ์–ด๋ ค์›€์„ ๊ฒช๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

2

์œ„ ๊ทธ๋ฆผ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด ํ˜„์žฌ ์ƒ๋‹น ์ˆ˜์˜ ์‹œ๊ฐ์žฅ์• ์ธ์ด ๋Œ€์ค‘๊ตํ†ต์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€ํ•˜์ฒ , ์ „์ฒ ๊ณผ ๋ฒ„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋น„์œจ์„ ์‚ดํŽด๋ณด๋ฉด ์•ฝ 30%์— ํ•ด๋‹นํ•ด ๊ฐ€์žฅ ํฐ ๋น„์œจ์„ ์ฐจ์ง€ํ•˜๋Š” ์žฅ์• ์ธ ์ฝœ๋ฐด๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๋น„์ค‘์„ ์ฐจ์ง€ํ•˜๋Š”๋ฐ์š”.
ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ ์€ ๋ฒ„์Šค ์‚ฌ์šฉ๋ฅ ๋Š” ๋งŽ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๊ฐ์žฅ์• ์ธ๋“ค์€ ์–ด๋–ค ์ด์œ ๋กœ ๋ฒ„์Šค๋ฅผ ์ž˜ ์ด์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ์„๊นŒ์š”?

์•„๋ž˜์˜ ํ‘œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๊ตํ†ต ์•ˆ๋‚ด ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์˜๊ฒฌ์ด ๊ฑฐ์ฃผ์ง€์—์„œ ํƒ์‹œ, ์ „์ฒ , ๋ฒ„์Šค์ •๋ฅ˜์žฅ๊นŒ์ง€ ์ด๋™ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋ผ๋Š” ์˜๊ฒฌ๊ณผ ํ•จ๊ป˜ ๊ฐ€์žฅ ํฐ ์ด์œ ๋กœ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค.

3


[์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ]


4

์Šค๋งˆํŠธํฐ์ด ๋Œ€์ค‘ํ™”๋˜๋ฉด์„œ ์‹œ๊ฐ์žฅ์• ์ธ๋“ค๋„ ์Šค๋งˆํŠธํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„์œจ์ด ๋†’์•„์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ์‹œ๊ฐ์žฅ์• ์ธ๋“ค์ด ์Šค๋งˆํŠธํฐ์„ ํ†ตํ•ด ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ . ํ•˜์ง€๋งŒ ์•ž์„œ ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ๊ณผ ๊ฐ™์ด, ์—ฌ์ „ํžˆ ๋Œ€์ค‘๊ตํ†ต์„ ์ด์šฉํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ๋Š” ์ •๋ณด ํŒŒ์•…์— ๋ถ€์กฑํ•จ์„ ๋А๋‚€๋‹ค๊ณ  ๋Œ€๋‹ตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €ํฌ๋Š” !! ์•ž์„œ ์–ธ๊ธ‰๋˜์—ˆ๋˜ ์ •๋ณด ๋ถ€์กฑ์ด๋ผ๋Š” ๋ฌธ์ œ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์Šค๋งˆํŠธํฐ์„ ์ด์šฉํ•˜์—ฌ ์Œ์„ฑ์œผ๋กœ ์•ˆ๋‚ด ๋ฐ›๋Š” ๋ฒ„์Šค ๋„์ฐฉ ์•ˆ๋‚ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

6 7



๋ฌผ๋ก , ํ˜„์žฌ ๋งˆ์ผ“์—๋Š” ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์–ดํ”Œ ์บก์ณ๋ณธ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์‹œ๊ฐ ์žฅ์• ์ธ๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ์ž‘์€ ๋ฒ„ํŠผ๊ณผ ๊ธ€์”จ, ๋ณต์žกํ•œ ์ธํ„ฐํŽ˜์ด์Šค, ์Œ์„ฑ์ธ์‹์œผ๋กœ ๊ฒ€์ƒ‰ ๋ฐ ์•ˆ๋‚ด ๋ถˆ๊ฐ€ ๋“ฑ ์—ฌ๋Ÿฌ ์กฐ์ž‘์˜ ์–ด๋ ค์›€์œผ๋กœ ์ธํ•ด ์‹œ๊ฐ์žฅ์• ์ธ๋“ค์€ ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณต ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์ €ํฌ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์Œ์„ฑ ์ธ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ, ์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ GPS๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜ํ•œ ๋ฒ„์Šค์ •๋ฅ˜์žฅ์ด ์ž๋™์œผ๋กœ ์ธ์‹๋˜๊ฒŒ ํ•˜๊ณ , ํ•ด๋‹น ์ •๋ฅ˜์žฅ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฒ„์Šค์˜ ๋„์ฐฉ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด๋Š” ํฌํ•ญ์‹œ ๋ฒ„์Šค์— ๋Œ€ํ•ด ์ œํ•œ์ ์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์— ์œ„์น˜ํ•ด์žˆ๋Š” ์ƒํ™ฉ์ž„์„ ๊ฐ€์ •ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


[์‚ฌ์šฉ์ž ์˜ˆ์ƒ ์กฐ๊ฑด]

์—ฌ๋Ÿฌ ์ƒํ™ฉ๊ณผ ๋”๋ถˆ์–ด ๋งŽ์€ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ €ํฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ์‚ฌ์šฉ์ž ์˜ˆ์ƒ ์กฐ๊ฑด์„ ๋จผ์ € ์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” ์Šค๋งˆํŠธ ํฐ์„ ์†Œ์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์šด ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ๋ฒ„์Šค ์ •๋ฅ˜์žฅ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ํƒ‘์Šนํ•  ๋ฒ„์Šค ๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค.

๋ณธ๋ก 

[ 1.์ ์šฉํ•œ ๊ธฐ์ˆ  ]

์ €ํฌ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ํˆด์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ… . GPS๋กœ ํ˜„์žฌ ์œ„์น˜ ์ธ์‹

GPS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚˜์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 4๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
1๋‹จ๊ณ„ : ์œ„์น˜ ๊ด€๋ฆฌ์ž ๊ฐ์ฒด ์ฐธ์กฐํ•˜๊ธฐ
2๋‹จ๊ณ„ : ์œ„์น˜ ๋ฆฌ์Šค๋„ˆ ๊ตฌํ˜„ํ•˜๊ธฐ
3๋‹จ๊ณ„ : ์œ„์น˜ ์ •๋ณด ์—…๋ฐ์ดํŠธ ์š”์ฒญํ•˜๊ธฐ
4๋‹จ๊ณ„ : ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๊ถŒํ•œ ์ถ”๊ฐ€ํ•˜๊ธฐ

๊ทธ๋Ÿผ ์ด์ œ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค !

1๋‹จ๊ณ„ - ์œ„์น˜ ๊ด€๋ฆฌ์ž ๊ฐ์ฒด ์ฐธ์กฐํ•˜๊ธฐ

์œ„์น˜ ๊ด€๋ฆฌ์ž(LocationManager)๋Š” ์‹œ์Šคํ…œ ์„œ๋น„์Šค์ด๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getSystemService()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  startLocationService() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ด ๋ฉ”์†Œ๋“œ ์•ˆ์—๋Š” ๋‚ด ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

28

๋นจ๊ฐ„ ๋ฐ•์Šค๋Š” ์œ„์น˜ ๊ด€๋ฆฌ์ž ๊ฐ์ฒด ์ฐธ์กฐ, ํŒŒ๋ž€ ๋ฐ•์Šค๋Š” ์ตœ๊ทผ์— ํ™•์ธํ–ˆ๋˜ ์œ„์น˜ ์ •๋ณด ํ™•์ธ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์œ„์น˜ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค ์ด๋ฆ„์€ Context.LOCATION_SERVICE์ด๋ฏ€๋กœ ์ด ์ด๋ฆ„์„ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ ํ›„, ์ตœ๊ทผ ์œ„์น˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ๋ณด๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฐ”๋กœ ์œ„์น˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Location ๊ฐ์ฒด๋Š” ์œ„๋„์™€ ๊ฒฝ๋„๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, getLatitude()์™€ getLongitude()๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ทธ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„ - ์œ„์น˜ ๋ฆฌ์Šค๋„ˆ ๊ตฌํ˜„ํ•˜๊ธฐ

์œ„์น˜ ๋ฆฌ์Šค๋„ˆ๋Š” ์œ„์น˜ ๊ด€๋ฆฌ์ž์—์„œ ์ „๋‹ฌํ•˜๋Š” ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์œ„์น˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๋ฆฌ์Šค๋„ˆ์˜ onLocationChanged() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

29

3๋‹จ๊ณ„ - ์œ„์น˜ ์ •๋ณด ์—…๋ฐ์ดํŠธ ์š”์ฒญํ•˜๊ธฐ

์œ„์น˜ ๊ด€๋ฆฌ์ž๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์œ„์น˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์ผ์ • ๊ฑฐ๋ฆฌ ์ด์ƒ์„ ์ด๋™ํ–ˆ์„ ๋•Œ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์œ„์น˜ ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์•Œ๋ ค๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” requestLocationUpdate() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„๊ณผ ์ตœ์†Œ ๊ฑฐ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ์œ„์น˜ ๋ฆฌ์Šค๋„ˆ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

30

๋นจ๊ฐ„ ๋ฐ•์Šค๋Š” ์ƒˆ๋กœ ์ •์˜ํ•œ GPSListener ๊ฐ์ฒด ์ƒ์„ฑ, ํŒŒ๋ž€ ๋ฐ•์Šค๋Š” ์œ„์น˜ ๊ด€๋ฆฌ์ž ๊ฐ์ฒด์˜ requestLocationUpdates() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์œ„์น˜ ์ •๋ณด ์ˆ˜์‹  ์‹œ์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ ์‹œ๊ฐ„์œผ๋กœ๋Š” 10์ดˆ, ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋Š” 0์œผ๋กœ ํ•˜์—ฌ 10์ดˆ๋งˆ๋‹ค ์œ„์น˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„ - ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๊ถŒํ•œ ์ถ”๊ฐ€ํ•˜๊ธฐ

GPS๋ฅผ ์ด์šฉํ•ด ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ์€ ACCESS_FINE_LOCATION์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ์•ฑ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
<uses-permission android:name=โ€android.permission.ACCESS_FINE_LOCATION" />
์ด ๊ถŒํ•œ์€ ์œ„ํ—˜ ๊ถŒํ•œ์œผ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ build.gradle(Moodule:app)ํŒŒ์ผ์„ ์—ด๊ณ  targetSDKVersion์˜ ๊ฐ’์„ 22๋กœ ๋‚ฎ์ถ”๋Š” ๊ฒƒ๋„ ์žŠ์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค !

โ…ก. ๊ณต๊ณต๋ฐ์ดํ„ฐ API๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ €ํฌ๋Š” GPS๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์œ„์น˜์˜ ์œ„๋„, ๊ฒฝ๋„ ๊ฐ’์„ ๋ฐ›์•„์™€ ๊ณต๊ณต๋ฐ์ดํ„ฐ API๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ˜„์žฌ ์žˆ๋Š” ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •๋ฅ˜์žฅ์˜ ๋ฐ์ดํ„ฐ์™€ ํ•ด๋‹น ์ •๋ฅ˜์žฅ์˜ ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŒŒ์‹ฑ(Parsing)์ด๋ž€, ์–ด๋–ค ํŽ˜์ด์ง€(๋ฌธ์„œ, html ๋“ฑ)์—์„œ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํŒจํ„ด์ด๋‚˜ ์ˆœ์„œ๋กœ ์ถ”์ถœํ•˜์—ฌ ์ •๋ณด๋กœ ๊ฐ€๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ ์‚ฌ์šฉ์ž์˜ ์กฐ๊ฑด์— ๋”ฐ๋ฅด๋ฉด, ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์— ์œ„์น˜ํ•ด ์žˆ๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„์Šค ์–ดํ”Œ์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ์œ„์น˜ํ•ด ์žˆ๋Š” ์ •๋ฅ˜์žฅ์˜ ์ด๋ฆ„์„ ์Œ์„ฑ์œผ๋กœ ์•ˆ๋‚ด๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋Š” GPS๋ฅผ ์ด์šฉํ•ด ํ˜„์žฌ ์œ„์น˜์˜ ์ขŒํ‘œ๋ฅผ ๋ฐ›์•„์™€ ๊ณต๊ณต๋ฐ์ดํ„ฐ API๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์œ„์น˜ํ•œ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์˜ ์ด๋ฆ„, ์œ„๋„, ๊ฒฝ๋„๋ฅผ ์ฝ์–ด ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด ์ƒ์—์„œ๋Š” ์ œ์ผ ์ƒ์œ„์˜ text ์ฐฝ์— ๋„์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ์€ ๊ณต๊ณต๋ฐ์ดํ„ฐ API๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

XMLPullParser๋ฅผ ์ด์šฉํ•ด ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  XML ํŒŒ์‹ฑ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

<XMLParser.java>
8

XMLParser๋Š” URL์„ ์ด์šฉํ•ด์„œ XMLPullParser ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ˜ํ™˜๋œ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  Tag ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. getXMLParser(string type)์—์„œ type์€ utf-8, euc-kr๋“ฑ XML์„ ๊ฐ€์ง€๊ณ  ์˜ฌ ๋•Œ ์–ด๋–ค ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์˜ฌ ๊ฒƒ์ธ๊ฐ€๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ utf-8๋กœ ๋˜์–ด์žˆ์ง€๋งŒ ๊ฐ„ํ˜น ๊นจ์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” euc-kr๋กœ ๋ณ€๊ฒฝํ•ด ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!

<BusStationXMLParser.java>
9 10 11

BusStationXMLParser๋Š” XMLParser์—์„œ ๊ฐ€์ง€๊ณ  ์˜จ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ๊ฐ’์„ BusStationDatas ๊ฐ์ฒด์— ์ €์žฅํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋กœ handler๋ฅผ ๋ฐ›๋Š” ์ด์œ ๋Š”! ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์‹ฑ์ด ๋๋‚œ ํ›„ Activity ์— ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ถ€๋ชจ class์ธ getXMLParser(โ€œutf-8โ€)์„ ์ด์šฉํ•ด์„œ XMLPullParser ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

32๋ฒˆ ์งธ ์ค„์€ getEventType()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์‚ฌ๊ฑด์ธ์ง€๋ฅผ ์กฐ์‚ฌํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ์–ป์€ ์ •๋ณด๋Š” START_DOCUMENT(๋ฌธ์„œ ์ฒ˜์Œ), END_DOCUMENT(๋ฌธ์„œ ๋), START_TAG(ํƒœ๊ทธ์˜ ์‹œ์ž‘(), END_TAG(), TEXT(๋ฐ์ดํ„ฐ)์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 33๋ฒˆ์งธ ์ค„์˜ tagIdentifier๋Š” ๊ฐ ํƒœ๊ทธ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๋‹น ํƒœ๊ทธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  next ์—์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ ์‚ฌ๊ฑด์„ ์กฐ์‚ฌํ•˜๋ฉด์„œ ๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. getName ๋ฉ”์„œ๋“œ๋Š” ํƒœ๊ทธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , getText๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. parsing์ด ๋๋‚˜๋ฉด handler์—๊ฒŒ empty message๋ฅผ ๋ณด๋‚ด ์ค๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฐ›์•„์˜ค๋Š” ๋ฒ„์Šค ์ •๋ฅ˜์žฅ ์ •๋ณด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

12



์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ์ •๋ณด๋Š” gpslati, gpslong, nodenm์ธ๋ฐ์š”! ํŒŒ์‹ฑํ•  ๋•Œ๋„ ๋‹ค๋ฅธ ์ •๋ณด๋Š” ๋นผ๊ณ , ์ € ํƒœ๊ทธ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

13



์šฐ์„  ์ด ๊ฒฐ๊ณผ๋Š” ํ˜„์žฌ ์œ„์น˜์˜ ์œ„๋„, ๊ฒฝ๋„๋ฅผ ํฌํ•ญ ์œก๊ฑฐ๋ฆฌ ์ •๋ฅ˜์žฅ์˜ ์œ„๋„, ๊ฒฝ๋„๊ฐ’์„ ๊ฐ€์ ธ์™€ ์ž„์˜๋กœ ๋งŒ๋“  Url๋กœ ๋‚˜์˜จ ๊ฒฐ๊ณผ์ด๋ฉฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค log์ฐฝ์— ๋„์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ณต๊ณต๋ฐ์ดํ„ฐAPI๋Š” tag์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์™€ ์›ํ•˜๋Š” ์ •๋ณด๋งŒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ…ข. Google Speech๋ฅผ ์ด์šฉํ•œ ์Œ์„ฑ์ธ์‹ ๋ฐ ์Œ์„ฑ์•ˆ๋‚ด

์ €ํฌ๋Š” ๊ตฌ๊ธ€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” google speech API๋ฅผ ํ†ตํ•ด ๋ฒ„์Šค ๋„์ฐฉ ์•ˆ๋‚ด์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์žฅ์• ์ธ์—๊ฒŒ ์Œ์„ฑ์œผ๋กœ ์ž…๋ ฅ ๋ฐ›๊ณ , ์Œ์„ฑ์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์ž์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” google speech API๋ฅผ ์ด์šฉํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์˜€๊ณ , ์‚ฌ์šฉ์ž๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๊ธฐ์˜ ์„ค์ •-์ผ๋ฐ˜-์ ‘๊ทผ์„ฑ ํƒญ์—์„œ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์ด๋ฅผ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•˜๋ฉด ํฌ๊ฒŒ STT(Speech To Text), TTS(Text To Speech)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-STT

์šฐ์„  STT(Speech To Text)๋Š” ์‚ฌ์šฉ์ž์˜ ์Œ์„ฑ ์ž…๋ ฅ์„ ์Šค๋งˆํŠธํฐ ํ™”๋ฉด์ƒ์— ๊ธ€์ž๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๊ณ ์ž ํ•˜๋Š” ๋ฒ„์Šค์˜ ๋ฒˆํ˜ธ๋ฅผ ์Œ์„ฑ์œผ๋กœ ์ž…๋ ฅ ๋ฐ›์•„ ํ™”๋ฉด์ƒ์— ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก STT๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

STT ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜๋Š” ์›๋ฆฌ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, ์Œ์„ฑ์œผ๋กœ ์ž…๋ ฅํ•œ input์ด ์„œ๋ฒ„๋กœ stream ๋˜๊ณ , ์ด์ œ ์„œ๋ฒ„์—์„œ๋Š” voice๊ฐ€ text๋กœ ๋ณ€ํ™˜๋˜์–ด ์ด๋ฅผ app์œผ๋กœ ๋˜๋Œ๋ ค ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ €๋Š” STT์™€ TTS ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ๋ช‡๊ฐ€์ง€ instance๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ์š”, ๊ฐ๊ฐ์˜ ์“ฐ์ž„์„ ๊ฐ„๋‹จํžˆ ์ฃผ์„์œผ๋กœ ๋‹ฌ์•„๋†“์•˜์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์“ฐ์ž„์€ ์ž ์‹œ ํ›„ ๋“ฑ์žฅํ•˜๋‹ˆ ๊ทธ ๋•Œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


19

์ •๋ฅ˜์žฅ ์ธ์‹ ํ›„์—, ๋งˆ์ดํฌ ๋ชจ์–‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด โ€œ๋ฒ„์Šค ๋ฒˆํ˜ธ๋ฅผ ํ•œ ์ž๋ฆฌ์”ฉ ์ˆซ์ž๋กœ ๋ง์”€ํ•˜์„ธ์š”.โ€๋ผ๋Š” ๋ง์ด ์ ํžŒ ์ฐฝ์ด ๋œจ๊ณ  ๋™์‹œ์— ์ด ๋ง์„ ์Œ์„ฑ์œผ๋กœ ์ฝ์–ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋ฒ„์Šค ๋ฒˆํ˜ธ๋ฅผ ํ•œ์ž๋ฆฌ์”ฉ ์ˆซ์ž๋กœ ์ฝ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


20

btnSpeak์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์Œ์„ฑ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— setOnClickListener๋กœ ์Œ์„ฑ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

(ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ์ฐฝ์€ ์ด๋Ÿฐ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.)
21


์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฒ„์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์•ˆ๋‚ดํ•˜๋Š” ์Œ์„ฑ์ด ๋‚˜์˜ค๊ณ  ๋‚˜๋ฉด, โ€˜๋”ฉ๋™โ€™ ํ•˜๋Š” ์†Œ๋ฆฌ์™€ ํ•จ๊ป˜ ์Œ์„ฑ ๋…น์Œ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋ณด์ด๋Š” promptSpeechInput() ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด์ง€์š”. ์‚ฌ์šฉ์ž๊ฐ€ ๋” ์ด์ƒ ๋ง์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋ฅผ ์ธ์‹ํ•˜๊ณ  ๋˜ ๋‹ค์‹œ โ€˜๋”ฉ๋™โ€™์†Œ๋ฆฌ์™€ ํ•จ๊ป˜ ๋…น์Œ์€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์•ฝ 2.75์ดˆ ์ •๋„๊ฐ€ ์ง€๋‚˜๋ฉด ์ข…๋ฃŒ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์„ค์ • ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

22


์—ฌ๊ธฐ์„œ ์ž…๋ ฅ ๋ฐ›์€ ๋ฒ„์Šค ๋ฒˆํ˜ธ๋Š” onActivityResult๋ผ๋Š” object์—์„œ stirng ๋ณ€์ˆ˜ busnum์— ์ €์žฅ๋˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋ฒ„์Šค ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์•ผ ํ•˜๋‹ˆ๊นŒ์š”..!

27



-TTS

๋‹ค์Œ์œผ๋กœ TTS(TextToSpeech)๋Š” ํ™”๋ฉด์ƒ์— ๋‚˜ํƒ€๋‚œ ๊ธ€์ž๋ฅผ ์Œ์„ฑ์œผ๋กœ ์ฝ์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ ๋ฐ›์€ ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์Šค์˜ ๋„์ฐฉ ์•ˆ๋‚ด ์ •๋ณด๋ฅผ ๊ณต๊ณต ๋ฐ์ดํ„ฐ์—์„œ ๋ฐ›์•„์˜ค๋ฉด, ์ด๋ฅผ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ TTS๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ์Œ์„ฑ์œผ๋กœ ์ฝ๋„๋ก ํ•˜์—ฌ ๋„์ฐฉ ์ •๋ณด๋ฅผ ๋“ค์„ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

24


๊ทธ๋ฆผ ์ƒ๋‹จ์— ํ‘œ์‹œํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ TTS ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  main Activity class์—์„œ TextToSpeech.OnInitListener ๋กœ๋ถ€ํ„ฐ Implement๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  TTS๋ฅผ ์‚ฌ์šฉ ํ•  ๋•Œ ์“ธ ์–ธ์–ด๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, onInit() method์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

25


๋จผ์ € ์•„๋ž˜๋ถ€๋ถ„์— ์žˆ๋Š” onInit method๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜์ž๋ฉด, ๊ฐ„๋‹จํžˆ ๋งํ•ด TTS ๊ธฐ๋Šฅ์˜ ์„ค์ • ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Result ๊ฐ’์— ๋Œ€ํ•ด ํ•œ๊ตญ์–ด๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด KOREA๋ผ๊ณ  ์ ํžŒ ๊ฒƒ์ด ๋ณด์ด์‹œ์ฃ ? ๊ทธ๋ฆฌ๊ณ  ์–ธ์–ด ์„ค์ • ๋ฟ ์•„๋‹ˆ๋ผ ์Œ์„ฑ ์ถœ๋ ฅ์‹œ์— ๋‚˜์˜ค๋Š” ๋ชฉ์†Œ๋ฆฌ์˜ ๋†’๋‚ฎ์ด์™€ ๋น ๋ฅด๊ธฐ๋„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ, TTS ๊ฒฐ๊ณผ๋Š” speakOut(); ์ด๋ผ๋Š” method๋ฅผ ํ†ตํ•ด ์Œ์„ฑ ์ถœ๋ ฅ์ด ๋˜๋Š”๋ฐ์š”. ๋งŒ์•ฝ ์ฝ์„ data๊ฐ€ ์—†๊ฑฐ๋‚˜ ์–ธ์–ด๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” TTS ๊ธฐ๋Šฅ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ๊ณ , ํ•ด๋‹น ์‚ฌํ•ญ ์—†์ด ์ •์ƒ ์ž‘๋™ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ speakOut(); method๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TTS๋ฅผ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ ์ฃผ์˜ํ•˜์‹ค ์ ์€, shutdown์„ ๊ผญ ์‹œํ‚ค์…”์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค! OnDestroy method๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œ์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์ด์ œ TTS๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ฝ์„ ๋Œ€์ƒ์ด ์ •ํ•ด์ง€๊ณ  ๋‚˜๋ฉด, speakOut()์ด๋ผ๋Š” object๋ฅผ ํ†ตํ•ด ์Œ์„ฑ ์ถœ๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” STT๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์€ txtSpeechInput์˜ ๊ฒฐ๊ณผ๋ฅผ text๋ผ๋Š” string์— ์ €์žฅํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์ฝ์–ด์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ txtSpeechInput์˜ ๊ฐ’๋งŒ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ speakOut ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ, ์—ฌ๊ธฐ์„œ QUEUE_FLUSH์˜ ์˜๋ฏธ๋Š” ํ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋น„์šฐ๊ณ  ์ƒˆ๋กœ์šด ๋‚ด์šฉ, ์ฆ‰ ์ƒˆ๋กœ์šด data๋ฅผ ์ฝ์–ด์ฃผ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ๊ทธ๋•Œ ๊ทธ๋•Œ ๋ฐ”๋€Œ๋Š” data๋ฅผ ์ฝ์–ด๋‚ผ ์ˆ˜ ์žˆ๊ฒ ์ฃ ?

26


[ 2.ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ ์ˆœ์„œ ]

14


ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ **GPS๋กœ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ํŒŒ์•…**ํ•˜๊ณ , ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์„ ์ฐพ์•„ ํ™”๋ฉด์— ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

15

ํ•ด๋‹น ์ •๋ฅ˜์žฅ์ด ์ธ์‹๋œ ํ›„, ์‚ฌ์šฉ์ž๋Š” ํ•˜๋‹จ์˜ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํƒ€๊ณ ์ž ํ•˜๋Š” ๋ฒ„์Šค์˜ ๋ฒˆํ˜ธ๋ฅผ ์Œ์„ฑ์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.(์˜ˆ: 100-1๋ฒˆ ๋ฒ„์Šค์˜ ๊ฒฝ์šฐ '์ผ๊ณต๊ณต ๋‹ค์‹œ ์ผ' ํ˜น์€ '์˜๊ณต๊ณต ๋‹ค์‹œ ์ผ')

๋ฒ„์Šค ๋„์ฐฉ ์•ˆ๋‚ด ์ •๋ณด๋Š” STT(Speech to Text)๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฌธ์ž๋กœ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ณ  TTS(Text to Speech)๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ, ๊ฐ™์€ ๋ฒˆํ˜ธ์˜ ๋ฒ„์Šค ์ •๋ณด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•  ๊ฒฝ์šฐ ํ˜„์žฌ ์œ„์น˜ ์ •๋ฅ˜์žฅ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒ„์Šค์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

16


ํ™”๋ฉด์— ํ•ด๋‹น ๋ฒ„์Šค์˜ ๋„์ฐฉ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด, TTS๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์Œ์„ฑ์œผ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ฒ„์Šค ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์Œ์„ฑ์œผ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

17


[ 3.์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ]

  • ๊ฒ€์€ ํ™”๋ฉด๊ณผ ํฐ ํฐ๊ธ€์”จ

18

์‹œ๊ฐ์žฅ์• ์ธ ๋ฐ ์ €์‹œ๋ ฅ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋งŒํผ, ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœํ•œ ์กฐ์ž‘ ๋‹ค์–‘ํ•œ ๋ฉ”๋‰ด๋‚˜ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด์˜ ํ™”๋ฉด ๋Œ€์‹ , ํ•œ ํ™”๋ฉด์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์Œ์„ฑ ์•ˆ๋‚ด ์—๋งŒ ์˜์กดํ•˜์—ฌ๋„ ์กฐ์ž‘ํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์—†๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค!! ๋˜ํ•œ ํ•ด๋‹น ์ •๋ฅ˜์žฅ์˜ ์œ„์น˜๋ฅผ GPS๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•˜์—ฌ ์‚ฌ์šฉ์— ๋”์šฑ ํŽธ๋ฆฌํ•จ์„ ์ฃผ๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ €ํฌ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์‹œ๊ฐ์žฅ์• ์ธ ๋ฐ ์ €์‹œ๋ ฅ์ž๋ฅผ ์œ„ํ•œ ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด ์•ˆ๋‚ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†Œ๊ฐœํ•˜์˜€๋Š”๋ฐ์š”. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ช‡๊ฐ€์ง€ ํŠน์ง•์„ ์š”์•ฝํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ตฌํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฉ”๋‰ด ๊ตฌ์„ฑ๊ณผ, ๊ฒ€์€ ๋ฐ”ํƒ•์— ํฐ ๊ธ€์”จ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์žฅ์• ์ธ์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋‘˜์งธ, ์‚ฌ์šฉ์ž์˜ GPS๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ธ์‹ํ•˜๊ณ , ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด ๋ฐ ๊ทธ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์Œ์„ฑ์œผ๋กœ ์ž…์ถœ๋ ฅ ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ์žฅ์• ์ธ๊ณผ ์ €์‹œ๋ ฅ์ž ๋ฟ ์•„๋‹ˆ๋ผ ๋น„์žฅ์•  ์‚ฌ์šฉ์ž๋“ค๋„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ?



[์•ž์œผ๋กœ์˜ ๊ณ„ํš] ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ์€ GPS๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์œ„์น˜์˜ ์œ„๋„, ๊ฒฝ๋„๋ฅผ ์ธ์‹ํ•˜์—ฌ ๊ฐ€๊นŒ์šด ์ •๋ฅ˜์†Œ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ log์— ๋„์šฐ๋Š” ๊ฒƒ๊นŒ์ง€ ๊ตฌํ˜„๋˜์—ˆ๊ณ , ๋‘ ๋ฒˆ์งธ ํŒŒ์ผ์€ ํ˜„์žฌ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •๋ฅ˜์žฅ์˜ ์œ„๋„, ๊ฒฝ๋„ ๊ฐ’์„ ์ž„์˜๋กœ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ์ •๋ฅ˜์žฅ์—์„œ์˜ ๋ฒ„์Šค ๋„์ฐฉ ์•ˆ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์Œ์„ฑ์œผ๋กœ ์ž…๋ ฅ ๋ฐ ์•ˆ๋‚ด๊นŒ์ง€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋” ๊ฐœ๋ฐœํ•ด์•ผํ•  ๋ถ€๋ถ„์€ ๊ฐ€๊นŒ์šด ์ •๋ฅ˜์†Œ์˜ ๋ฆฌ์ŠคํŠธ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •๋ฅ˜์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ทธ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋‘ ๋ฒˆ์งธ ํŒŒ์ผ๋กœ ๋ณด๋‚ด Url์„ ์™„์„ฑ์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!!

Clone this wiki locally