Skip to content

Latest commit

ย 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์‹œ๋‹ˆ์–ด ์œ„์น˜ ์ถ”์ฒœ ์•ฑ (Senior Location App)

์–ด๋ฅด์‹ ์ด ํ˜„์žฌ ์œ„์น˜ ์ฃผ๋ณ€์˜ ๋ณ‘์›ยท์•ฝ๊ตญยทํŽธ์˜์ ยท๊ฒฝ์ฐฐ์„œ ๋“ฑ ์ฃผ์š” ์žฅ์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๊ณ , ์ž ๊ธˆํ™”๋ฉด/ํ™ˆ ์•ˆ๋‚ด ํ™”๋ฉด์—์„œ ํฐ ๊ธ€์”จ์™€ ์Œ์„ฑ์œผ๋กœ ์ด๋™ ์•ˆ๋‚ด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  Android ์•ฑ์ž…๋‹ˆ๋‹ค.

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


๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
์–ธ์–ด Kotlin
UI Android View System, XML, ViewBinding
์ง€๋„ Google Maps SDK for Android
์žฅ์†Œ Google Places API (New)
๊ฒฝ๋กœ Google Routes API
๋„คํŠธ์›Œํฌ Retrofit, Moshi, OkHttp
๋กœ์ปฌ DB Room, KSP
์ธ์ฆ/ํ”„๋กœํ•„ Firebase Authentication, Cloud Firestore
์œ„์น˜ FusedLocationProviderClient, Foreground Service
์Œ์„ฑ ์•ˆ๋‚ด Android TextToSpeech
๋น„๋™๊ธฐ Kotlin Coroutines, Flow
์ตœ์†Œ SDK 24
ํƒ€๊ฒŸ SDK 34

์ฃผ์š” ๊ธฐ๋Šฅ

์ง€๋„/์žฅ์†Œ ํƒ์ƒ‰

  • ํ˜„์žฌ ์œ„์น˜ ๊ถŒํ•œ ์š”์ฒญ ๋ฐ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ง€๋„ ์ด๋™
  • Google Places API๋กœ ์ฃผ๋ณ€ ์žฅ์†Œ ์กฐํšŒ
  • ๋ณ‘์›, ํŽธ์˜์ , ๊ฒฝ์ฐฐ์„œ, ์ง€ํ•˜์ฒ  ๋“ฑ ์นดํ…Œ๊ณ ๋ฆฌ ๋งคํ•‘
  • ์นดํ…Œ๊ณ ๋ฆฌยท๊ฒ€์ƒ‰ ๋ฐ˜๊ฒฝยท์˜์—… ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ ์ ์šฉ
  • ์ง€๋„ ๋งˆ์ปค ๋ฐ ํ•˜๋‹จ ์žฅ์†Œ ๋ชฉ๋ก ํ‘œ์‹œ
  • ์žฅ์†Œ ์ƒ์„ธ ํ™”๋ฉด์—์„œ ์‚ฌ์ง„/๋ฆฌ๋ทฐ/๊ฑฐ๋ฆฌ/๋„๋ณด ์‹œ๊ฐ„ ํ‘œ์‹œ
  • Google Maps ๊ธธ์ฐพ๊ธฐ ๋”ฅ๋งํฌ ์ง€์›

์ถ”์ฒœ/๊ฐœ์ธํ™”

  • Firebase ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…
  • ์˜จ๋ณด๋”ฉ์—์„œ ์ด๋ฆ„, ์—ฐ๋ น๋Œ€, ์„ ํ˜ธ ์žฅ์†Œ ์ €์žฅ
  • Firestore ํ”„๋กœํ•„ + ๋กœ์ปฌ ์บ์‹œ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ
  • ๋ฐฉ๋ฌธ ๋นˆ๋„, ์„ ํ˜ธ ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์ ์ˆ˜ ๊ณ„์‚ฐ
  • Room์— ์ตœ๊ทผ ๋ฐฉ๋ฌธ ์žฅ์†Œ ์ €์žฅ
  • 5๋ถ„ ์ด๋‚ด ๋™์ผ ์žฅ์†Œ ์ค‘๋ณต ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋ฐฉ์ง€

HomeActivity ์•ˆ๋‚ด ํ™”๋ฉด

  • Android ์ •์ฑ…์„ ๊ณ ๋ คํ•ด MyPage ๋ฒ„ํŠผ/๋ถ€ํŒ… ์•Œ๋ฆผ ํด๋ฆญ์œผ๋กœ ์•ˆ๋‚ด ํ™”๋ฉด ์ง„์ž…
  • ํ˜„์žฌ ์‹œ๊ฐ„/๋‚ ์งœ ํ‘œ์‹œ
  • ์ตœ๊ทผ ๋ฐฉ๋ฌธ ์žฅ์†Œ + ์ฃผ๋ณ€ ์ถ”์ฒœ ์žฅ์†Œ ํ‘œ์‹œ
  • ๊ฑฐ๋ฆฌ์ˆœ/์ถ”์ฒœ์ˆœ/๋ฐฉ๋ฌธ ํšŸ์ˆ˜์ˆœ ์ •๋ ฌ
  • ์ „์ฒด/๋ณ‘์›/ํŽธ์˜์ /๊ฒฝ์ฐฐ์„œ ํ•„ํ„ฐ
  • ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ + ๋‚จ์€ ๊ฑฐ๋ฆฌ ํ‘œ์‹œ
  • TTS ๊ธฐ๋ฐ˜ ๋ฐฉํ–ฅ ์•ˆ๋‚ด
  • ์žฅ์†Œ ์ƒ์„ธ ์ง„์ž…
  • ํ•˜ํŠธ ๋ฒ„ํŠผ์œผ๋กœ ์ฆ๊ฒจ์ฐพ๊ธฐ/๊ณ ์ • ์ƒํƒœ ๋ณ€๊ฒฝ

์ฆ๊ฒจ์ฐพ๊ธฐ/ํ•˜ํŠธ ๊ณ ์ • ํ†ตํ•ฉ

์ฆ๊ฒจ์ฐพ๊ธฐ์™€ HomeActivity ํ•˜ํŠธ ๊ณ ์ •์€ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • PlaceDetailActivity์—์„œ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ โ†’ HomeActivity ํ•˜ํŠธ ํ‘œ์‹œ
  • HomeActivity์—์„œ ํ•˜ํŠธ ์„ ํƒ โ†’ MyPage ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก์— ํ‘œ์‹œ
  • MyPage ์ตœ๊ทผ ์žฅ์†Œ์—์„œ ํ•˜ํŠธ ์„ ํƒ โ†’ HomeActivity์™€ ์ฆ๊ฒจ์ฐพ๊ธฐ์— ๋™์‹œ ๋ฐ˜์˜
  • ๋Œ€ํ‘œ ๊ณ ์ • ์žฅ์†Œ๋Š” ์ฃผ๊ธฐ์  TTS ์•ˆ๋‚ด์— ์‚ฌ์šฉ

ํ•ต์‹ฌ ์ €์žฅ์†Œ: AppPreferences.favoritePlaceIds, AppPreferences.pinnedPlaceId

๋‹จ๊ณ„ํ˜• ๋„๋ณด/๋Œ€์ค‘๊ตํ†ต ์•ˆ๋‚ด

Routes API ์‘๋‹ต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ณด-only, ๋ฒ„์Šค, ์ง€ํ•˜์ฒ  ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋„๋ณด-only ์žฅ์†Œ

  • ๋ชฉ์ ์ง€๊นŒ์ง€ ๋„๋ณด ์•ˆ๋‚ด
  • ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ์™€ ๋‚จ์€ ๊ฑฐ๋ฆฌ ์œ ์ง€
  • ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋ฅผ TTS๋กœ ์žฌ์ƒ

๋ฒ„์Šค ๊ฒฝ๋กœ

  • ์ •๋ฅ˜์žฅ๊นŒ์ง€ ๋„๋ณด ์•ˆ๋‚ด
  • ์ •๋ฅ˜์žฅ ๊ทผ์ฒ˜์—์„œ ๋‹ค์Œ ํ–‰๋™ ์•ˆ๋‚ด ํ‘œ์‹œ
  • ๋ฒ„์Šค ๋ฒˆํ˜ธ, ๋ฐฉ๋ฉด, ์ด๋™ ์ •๋ฅ˜์žฅ ์ˆ˜, ํ•˜์ฐจ ์ •๋ฅ˜์žฅ ์•ˆ๋‚ด
  • [ํƒ‘์Šนํ–ˆ์–ด์š”], [๋‚ด๋ ธ์–ด์š”], [๋‹ค์‹œ ๋“ฃ๊ธฐ] ๋ฒ„ํŠผ ์ œ๊ณต
  • ํ•˜์ฐจ ํ›„ ๋ชฉ์ ์ง€๊นŒ์ง€ ๋„๋ณด ์•ˆ๋‚ด ์ „ํ™˜

์ง€ํ•˜์ฒ  ๊ฒฝ๋กœ

  • ์—ญ/์ถœ๊ตฌ๊นŒ์ง€ ๋„๋ณด ์•ˆ๋‚ด
  • ์—ญ ๊ทผ์ฒ˜์—์„œ ๋…ธ์„ , ๋ฐฉ๋ฉด, ์ด๋™ ์—ญ ์ˆ˜, ํ•˜์ฐจ์—ญ ์•ˆ๋‚ด
  • Routes ์•ˆ๋‚ด ๋ฌธ๊ตฌ์— ์ถœ๊ตฌ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ์ง„์ž…/ํ•˜์ฐจ ์ถœ๊ตฌ ์•ˆ๋‚ด ๋ฐ˜์˜
  • ์ถœ๊ตฌ ์ •๋ณด๊ฐ€ ์—†์œผ๋ฉด ์—ญ ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ fallback
  • ํƒ‘์Šน ์ „์—๋Š” ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์œ ์ง€
  • ํƒ‘์Šน ์ค‘์—๋Š” ๋„๋ณด ํ™”์‚ดํ‘œ๋ฅผ ์ˆจ๊ฒจ ์˜คํ•ด ๋ฐฉ์ง€
  • ํ•˜์ฐจ ํ›„ ๋ชฉ์ ์ง€๊นŒ์ง€ ๋„๋ณด ์•ˆ๋‚ด ์ „ํ™˜

๊ด€๋ จ ์ฝ”๋“œ:

  • RoutesRepository.kt โ€” Routes API ํ˜ธ์ถœ ๋ฐ Guide ์ƒ์„ฑ
  • HomeActivity.kt โ€” ์•ˆ๋‚ด ์ƒํƒœ ์ „ํ™˜, ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ํƒ‘์Šน ์•ˆ๋‚ด ํ‘œ์‹œ
  • RecentPlaceAdapter.kt โ€” ์นด๋“œ ๋‚ด ์•ˆ๋‚ด ์„ค๋ช…/๋ฒ„ํŠผ ๋ฐ”์ธ๋”ฉ
  • RecentPlace.kt โ€” ์นด๋“œ UI ๋ชจ๋ธ

HomeActivity ์ƒˆ๋กœ๊ณ ์นจ ๊ฐœ์„ 

์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹จ์ˆœ UI ๊ฐฑ์‹ ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๊ฐ•์ œ ์žฌ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘ ์ˆœ์„œ:

  1. ํ˜„์žฌ ์œ„์น˜ ํ™•์ธ ์ค‘ ํ‘œ์‹œ
  2. ๊ธฐ์กด ๊ฒฝ๋กœ ์ž‘์—…/๊ฐ€์ด๋“œ/๊ฒ€์ฆ ์บ์‹œ ์ดˆ๊ธฐํ™”
  3. ์ฃผ๋ณ€ ์žฅ์†Œ ๋‹ค์‹œ ์กฐํšŒ
  4. ์ถ”์ฒœ ๋ชฉ๋ก ๋‹ค์‹œ ์ •๋ ฌ
  5. Routes API ๊ฒฝ๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐ
  6. ์™„๋ฃŒ/์‹คํŒจ ์ƒํƒœ ๋ฌธ๊ตฌ์™€ Toast ํ‘œ์‹œ

์œ„์น˜ ํš๋“ ์‹คํŒจ ์‹œ ๋งˆ์ง€๋ง‰ ์ €์žฅ ์œ„์น˜๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜ ๊ธฐ์ค€์œผ๋กœ ์žฌ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ… ํ›„ ํ™ˆ ์•ˆ๋‚ด ์•Œ๋ฆผ

ํœด๋Œ€ํฐ์ด ์žฌ๋ถ€ํŒ…๋˜๋ฉด BOOT_COMPLETED๋ฅผ ๋ฐ›์•„ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ์•Œ๋ฆผ ์ œ๋ชฉ: ์œ„์น˜ ์•ˆ๋‚ด๋ฅผ ์‹œ์ž‘ํ• ๊นŒ์š”?
  • ์•Œ๋ฆผ ํด๋ฆญ ์‹œ HomeActivity ์‹คํ–‰
  • Android 13 ์ด์ƒ์—์„œ๋Š” ์•Œ๋ฆผ ๊ถŒํ•œ ํ•„์š”
  • ์•ฑ์„ ํ•œ ๋ฒˆ ์ด์ƒ ์‹คํ–‰ํ•œ ๋’ค๋ถ€ํ„ฐ ๋ถ€ํŒ… ์•Œ๋ฆผ์ด ์ •์ƒ ๋™์ž‘

๊ด€๋ จ ์ฝ”๋“œ:

  • BootCompletedReceiver.kt
  • AndroidManifest.xml์˜ RECEIVE_BOOT_COMPLETED, POST_NOTIFICATIONS

์œ„์ ฏ/๋ฐฑ๊ทธ๋ผ์šด๋“œ ์œ„์น˜

  • ํ™ˆ ํ™”๋ฉด AppWidget์—์„œ ์œ„์น˜ ๊ฐฑ์‹  ์ƒํƒœ ํ‘œ์‹œ
  • Foreground Service ๊ธฐ๋ฐ˜ ์œ„์น˜ ์ถ”์  ๊ตฌ์กฐ ํฌํ•จ
  • ์œ„์น˜ ์—…๋ฐ์ดํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋กœ HomeActivity ์•ˆ๋‚ด ๊ฐฑ์‹ 

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

app/src/main/
โ”œโ”€โ”€ AndroidManifest.xml
โ”œโ”€โ”€ java/com/example/seniorlocationapp/
โ”‚   โ”œโ”€โ”€ MainActivity.kt
โ”‚   โ”œโ”€โ”€ AuthGuardActivity.kt
โ”‚   โ”œโ”€โ”€ LoginActivity.kt
โ”‚   โ”œโ”€โ”€ SignupActivity.kt
โ”‚   โ”œโ”€โ”€ OnboardingActivity.kt
โ”‚   โ”œโ”€โ”€ MapActivity.kt
โ”‚   โ”œโ”€โ”€ HomeActivity.kt
โ”‚   โ”œโ”€โ”€ MyPageActivity.kt
โ”‚   โ”œโ”€โ”€ PlaceDetailActivity.kt
โ”‚   โ”œโ”€โ”€ SearchResultsActivity.kt
โ”‚   โ”œโ”€โ”€ FilterActivity.kt
โ”‚   โ”œโ”€โ”€ SettingsActivity.kt
โ”‚   โ”œโ”€โ”€ BootCompletedReceiver.kt
โ”‚   โ”œโ”€โ”€ adapter/
โ”‚   โ”‚   โ”œโ”€โ”€ RecentPlaceAdapter.kt
โ”‚   โ”‚   โ”œโ”€โ”€ FavoritePlaceAdapter.kt
โ”‚   โ”‚   โ”œโ”€โ”€ MapPlaceAdapter.kt
โ”‚   โ”‚   โ”œโ”€โ”€ PlaceAdapter.kt
โ”‚   โ”‚   โ””โ”€โ”€ SearchResultAdapter.kt
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ AppPreferences.kt
โ”‚   โ”‚   โ”œโ”€โ”€ PlacesRepository.kt
โ”‚   โ”‚   โ”œโ”€โ”€ RoutesRepository.kt
โ”‚   โ”‚   โ”œโ”€โ”€ UserRepository.kt
โ”‚   โ”‚   โ”œโ”€โ”€ UserProfileCache.kt
โ”‚   โ”‚   โ”œโ”€โ”€ RecommendationScorer.kt
โ”‚   โ”‚   โ”œโ”€โ”€ CategoryMapping.kt
โ”‚   โ”‚   โ””โ”€โ”€ CategoryDisplay.kt
โ”‚   โ”œโ”€โ”€ db/
โ”‚   โ”‚   โ”œโ”€โ”€ AppDatabase.kt
โ”‚   โ”‚   โ”œโ”€โ”€ dao/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ PlaceDao.kt
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ RecentPlaceDao.kt
โ”‚   โ”‚   โ””โ”€โ”€ entity/
โ”‚   โ”‚       โ”œโ”€โ”€ PlaceEntity.kt
โ”‚   โ”‚       โ””โ”€โ”€ RecentPlaceEntity.kt
โ”‚   โ”œโ”€โ”€ location/
โ”‚   โ”‚   โ”œโ”€โ”€ LocationHelper.kt
โ”‚   โ”‚   โ”œโ”€โ”€ LocationTrackingManager.kt
โ”‚   โ”‚   โ”œโ”€โ”€ LocationTrackingService.kt
โ”‚   โ”‚   โ”œโ”€โ”€ LocationUpdateBroadcast.kt
โ”‚   โ”‚   โ””โ”€โ”€ HeadingProvider.kt
โ”‚   โ”œโ”€โ”€ model/
โ”‚   โ”‚   โ”œโ”€โ”€ PlaceDto.kt
โ”‚   โ”‚   โ”œโ”€โ”€ RouteDto.kt
โ”‚   โ”‚   โ”œโ”€โ”€ RecentPlace.kt
โ”‚   โ”‚   โ”œโ”€โ”€ SearchResult.kt
โ”‚   โ”‚   โ”œโ”€โ”€ ScoredPlace.kt
โ”‚   โ”‚   โ””โ”€โ”€ UserProfile.kt
โ”‚   โ”œโ”€โ”€ network/
โ”‚   โ”‚   โ”œโ”€โ”€ PlacesApiClient.kt
โ”‚   โ”‚   โ”œโ”€โ”€ PlacesApiService.kt
โ”‚   โ”‚   โ”œโ”€โ”€ RoutesApiClient.kt
โ”‚   โ”‚   โ””โ”€โ”€ RoutesApiService.kt
โ”‚   โ”œโ”€โ”€ util/
โ”‚   โ”‚   โ”œโ”€โ”€ AccessibilityUiHelper.kt
โ”‚   โ”‚   โ”œโ”€โ”€ DistanceFormatter.kt
โ”‚   โ”‚   โ”œโ”€โ”€ KoreanPlaceName.kt
โ”‚   โ”‚   โ”œโ”€โ”€ NavigationCueHelper.kt
โ”‚   โ”‚   โ”œโ”€โ”€ PermissionHelper.kt
โ”‚   โ”‚   โ””โ”€โ”€ RemoteImageLoader.kt
โ”‚   โ”œโ”€โ”€ viewModel/
โ”‚   โ”‚   โ””โ”€โ”€ FilterViewModel.kt
โ”‚   โ””โ”€โ”€ widget/
โ”‚       โ””โ”€โ”€ LocationAppWidgetProvider.kt
โ””โ”€โ”€ res/
    โ”œโ”€โ”€ layout/
    โ”‚   โ”œโ”€โ”€ activity_home.xml
    โ”‚   โ”œโ”€โ”€ activity_map.xml
    โ”‚   โ”œโ”€โ”€ activity_place_detail.xml
    โ”‚   โ”œโ”€โ”€ activity_my_page.xml
    โ”‚   โ””โ”€โ”€ item_recent_place.xml
    โ”œโ”€โ”€ drawable/
    โ”œโ”€โ”€ menu/
    โ”œโ”€โ”€ values/
    โ””โ”€โ”€ xml/

ํ•ต์‹ฌ ์ฝ”๋“œ ์„ค๋ช…

HomeActivity.kt

์•ฑ์˜ ํ•ต์‹ฌ ์•ˆ๋‚ด ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • ์ž ๊ธˆํ™”๋ฉด ์œ„ ํ‘œ์‹œ ์„ค์ •
  • ํ˜„์žฌ ์œ„์น˜ ์ˆ˜์‹  ๋ฐ ๊ฒฝ๋กœ ๊ฐฑ์‹  ํŒ๋‹จ
  • ์ฃผ๋ณ€ ์žฅ์†Œ/์ตœ๊ทผ ๋ฐฉ๋ฌธ ์žฅ์†Œ ์ถ”์ฒœ ๋ชฉ๋ก ๊ตฌ์„ฑ
  • ์ •๋ ฌ/์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ ์ฒ˜๋ฆฌ
  • RoutesRepository์—์„œ ๋ฐ›์€ Guide๋ฅผ RecentPlace UI ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜
  • ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ, ๊ฑฐ๋ฆฌ, TTS ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ƒ์„ฑ
  • ๋Œ€์ค‘๊ตํ†ต ๋‹จ๊ณ„ ์ƒํƒœ ๊ด€๋ฆฌ
    • APPROACHING: ์—ญ/์ •๋ฅ˜์žฅ๊นŒ์ง€ ์ด๋™ ์ค‘
    • BOARDED: ํƒ‘์Šน ์ค‘
    • ALIGHTED: ํ•˜์ฐจ ํ›„ ๋„๋ณด ์•ˆ๋‚ด
  • [ํƒ‘์Šนํ–ˆ์–ด์š”], [๋‚ด๋ ธ์–ด์š”], [๋‹ค์‹œ ๋“ฃ๊ธฐ] ์ฒ˜๋ฆฌ
  • ์ƒˆ๋กœ๊ณ ์นจ ๊ฐ•์ œ ์žฌ์กฐํšŒ ์ฒ˜๋ฆฌ

์ค‘์š” ์ƒํƒœ:

routeGuides: MutableMap<String, RoutesRepository.Guide>
transitStages: MutableMap<String, TransitStage>
nearbyPlaces: List<PlaceEntity>
latestRecommendations: List<RecentPlace>

RoutesRepository.kt

Google Routes API ์ „๋‹ด ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • ๋„๋ณด/๋Œ€์ค‘๊ตํ†ต ๊ฒฝ๋กœ ์š”์ฒญ
  • ๊ฐ€๊นŒ์šด ์žฅ์†Œ๋Š” ๋„๋ณด ๊ฒฝ๋กœ ์šฐ์„ 
  • ๋Œ€์ค‘๊ตํ†ต ๊ฒฝ๋กœ์—์„œ ์ฒซ ํƒ‘์Šน ๋‹จ๊ณ„ ์ถ”์ถœ
  • ๋ฒ„์Šค/์ง€ํ•˜์ฒ  ๊ตฌ๋ถ„
  • ์ถœ๋ฐœ ์ •๋ฅ˜์žฅ/์—ญ, ๋„์ฐฉ ์ •๋ฅ˜์žฅ/์—ญ, ๋…ธ์„ ๋ช…, ๋ฐฉ๋ฉด, ์ •๋ฅ˜์žฅ ์ˆ˜ ์ถ”์ถœ
  • ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ƒ์„ฑ
  • ๊ฒฝ๋กœ ์บ์‹œ ์ €์žฅ/๋ณต์›

ํ•ต์‹ฌ ๋ชจ๋ธ:

data class Guide(
    val summary: String,
    val instruction: String,
    val firstFlow: FirstFlow,
    val transitLine: String?,
    val transitHeadsign: String?,
    val departureStopName: String?,
    val arrivalStopName: String?,
    val stopCount: Int,
    val transitInstruction: String?,
    val ridingInstruction: String?,
    val alightInstruction: String?
)

RecentPlaceAdapter.kt / item_recent_place.xml

HomeActivity์™€ MyPage์˜ ์žฅ์†Œ ์นด๋“œ UI๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • ๋ฐฉํ–ฅ ์•„์ด์ฝ˜/๊ฑฐ๋ฆฌ ํ‘œ์‹œ
  • ์žฅ์†Œ๋ช…/์š”์•ฝ ํ‘œ์‹œ
  • ํ•˜ํŠธ ๋ฒ„ํŠผ ํ‘œ์‹œ
  • ๋Œ€์ค‘๊ตํ†ต ์•ˆ๋‚ด ์„ค๋ช… ํ‘œ์‹œ
  • ํƒ‘์Šน/ํ•˜์ฐจ/๋‹ค์‹œ ๋“ฃ๊ธฐ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ์ „๋‹ฌ

AppPreferences.kt

์‚ฌ์šฉ์ž๋ณ„ SharedPreferences ๋ž˜ํผ์ž…๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • ์‚ฌ์šฉ์ž ์„ค์ • ์ €์žฅ
  • ๊ธ€์”จ ํฌ๊ธฐ, ์Œ์„ฑ ์•ˆ๋‚ด, ์œ„์น˜ ๊ฐฑ์‹  ์ฃผ๊ธฐ ์ €์žฅ
  • ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์บ์‹ฑ
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ID Set ๊ด€๋ฆฌ
  • HomeActivity ํ•˜ํŠธ ๊ณ ์ •๊ณผ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ƒํƒœ ํ†ตํ•ฉ

ํ•ต์‹ฌ ๊ทœ์น™:

  • toggleFavorite(placeId)๊ฐ€ ์ฆ๊ฒจ์ฐพ๊ธฐ์™€ ํ™ˆ ํ•˜ํŠธ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ๋ณ€๊ฒฝ
  • pinnedPlaceId๋Š” ์ฃผ๊ธฐ์  ์Œ์„ฑ ์•ˆ๋‚ด์šฉ ๋Œ€ํ‘œ ์žฅ์†Œ๋กœ ์‚ฌ์šฉ

MapActivity.kt

์ง€๋„ ์ค‘์‹ฌ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • Google Map ์ดˆ๊ธฐํ™”
  • ํ˜„์žฌ ์œ„์น˜ ํ‘œ์‹œ
  • ์ฃผ๋ณ€ ์žฅ์†Œ ์กฐํšŒ ๋ฐ ๋งˆ์ปค ํ‘œ์‹œ
  • ์นดํ…Œ๊ณ ๋ฆฌ/์ฆ๊ฒจ์ฐพ๊ธฐ ํƒญ ์ฒ˜๋ฆฌ
  • ์žฅ์†Œ ์„ ํƒ ์‹œ PlaceDetailActivity ์ง„์ž…

MyPageActivity.kt

ํ”„๋กœํ•„, ์ตœ๊ทผ ๋ฐฉ๋ฌธ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • Firebase/์บ์‹œ ํ”„๋กœํ•„ ํ‘œ์‹œ
  • ์ตœ๊ทผ ๋ฐฉ๋ฌธ ๋ชฉ๋ก ํ‘œ์‹œ
  • ์ตœ๊ทผ ๋ฐฉ๋ฌธ ํ•˜ํŠธ ํ† ๊ธ€
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก ํ‘œ์‹œ
  • HomeActivity ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ง„์ž…

BootCompletedReceiver.kt

ํœด๋Œ€ํฐ ์žฌ๋ถ€ํŒ… ํ›„ ํ™ˆ ์•ˆ๋‚ด ํ™”๋ฉด์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—ญํ• :

  • Intent.ACTION_BOOT_COMPLETED ์ˆ˜์‹ 
  • ์•Œ๋ฆผ ์ฑ„๋„ ์ƒ์„ฑ
  • ์•Œ๋ฆผ ํด๋ฆญ ์‹œ HomeActivity ์‹คํ–‰ PendingIntent ์—ฐ๊ฒฐ

์‚ฌ์šฉ์ž ํ๋ฆ„

์•ฑ ์‹คํ–‰
  โ†“
MainActivity
  โ†“
LoginActivity / SignupActivity
  โ†“
OnboardingActivity
  โ†“
MapActivity
  โ”œโ”€ ํ˜„์žฌ ์œ„์น˜ ํ™•์ธ
  โ”œโ”€ ์ฃผ๋ณ€ Places ์กฐํšŒ
  โ”œโ”€ ์ง€๋„ ๋งˆ์ปค ํ‘œ์‹œ
  โ””โ”€ ์žฅ์†Œ ์„ ํƒ โ†’ PlaceDetailActivity

MyPageActivity
  โ”œโ”€ ํ”„๋กœํ•„ ํ™•์ธ
  โ”œโ”€ ์ตœ๊ทผ ๋ฐฉ๋ฌธ ํ™•์ธ
  โ”œโ”€ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ™•์ธ
  โ””โ”€ HomeActivity ์ง„์ž…

HomeActivity
  โ”œโ”€ ์ฃผ๋ณ€ ์ถ”์ฒœ/์ตœ๊ทผ ๋ฐฉ๋ฌธ ๋ชฉ๋ก ํ‘œ์‹œ
  โ”œโ”€ ๋„๋ณด ๋ฐฉํ–ฅ ํ™”์‚ดํ‘œ ์•ˆ๋‚ด
  โ”œโ”€ TTS ๋‹ค์‹œ ๋“ฃ๊ธฐ
  โ”œโ”€ ๋Œ€์ค‘๊ตํ†ต ํƒ‘์Šน ์ „ ์•ˆ๋‚ด
  โ”œโ”€ ํƒ‘์Šนํ–ˆ์–ด์š” โ†’ ํƒ‘์Šน ์ค‘ ์•ˆ๋‚ด
  โ”œโ”€ ๋‚ด๋ ธ์–ด์š” โ†’ ๋ชฉ์ ์ง€ ๋„๋ณด ์•ˆ๋‚ด
  โ””โ”€ ํ•˜ํŠธ โ†’ ์ฆ๊ฒจ์ฐพ๊ธฐ/๊ณ ์ • ๋™๊ธฐํ™”

ํœด๋Œ€ํฐ ์žฌ๋ถ€ํŒ…
  โ†“
BootCompletedReceiver
  โ†“
์•Œ๋ฆผ ํ‘œ์‹œ
  โ†“
์•Œ๋ฆผ ํด๋ฆญ โ†’ HomeActivity

ํ™˜๊ฒฝ ์„ค์ •

Google Cloud Console

ํ™œ์„ฑํ™”ํ•  API:

  • Maps SDK for Android
  • Places API (New)
  • Routes API

API ํ‚ค ์ œํ•œ:

  • Android ์•ฑ ์ œํ•œ ์‚ฌ์šฉ
  • ํŒจํ‚ค์ง€๋ช…๊ณผ SHA-1 ๋“ฑ๋ก

Firebase

ํ•„์š” ํ•ญ๋ชฉ:

  • Firebase Authentication ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ๋กœ๊ทธ์ธ ํ™œ์„ฑํ™”
  • Cloud Firestore ํ™œ์„ฑํ™”
  • app/google-services.json ๋ฐฐ์น˜

local.properties

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ local.properties์— ๋‹ค์Œ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

MAPS_API_KEY=YOUR_GOOGLE_MAPS_API_KEY
DEBUG_SHA1=AA:BB:CC:DD:...

SHA-1 ํ™•์ธ:

./gradlew signingReport

๊ถŒํ•œ

Manifest ์ฃผ์š” ๊ถŒํ•œ:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

์„ค๋ช…:

  • ์œ„์น˜ ๊ถŒํ•œ: ์ฃผ๋ณ€ ์žฅ์†Œ ์ถ”์ฒœ, ๊ฒฝ๋กœ ์•ˆ๋‚ด
  • ์•Œ๋ฆผ ๊ถŒํ•œ: Android 13 ์ด์ƒ ๋ถ€ํŒ… ํ›„ ํ™ˆ ์•ˆ๋‚ด ์•Œ๋ฆผ
  • ๋ถ€ํŒ… ๊ถŒํ•œ: ์žฌ๋ถ€ํŒ… ํ›„ ์•Œ๋ฆผ ํ‘œ์‹œ
  • Foreground Service ์œ„์น˜ ๊ถŒํ•œ: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์œ„์น˜ ์ถ”์  ๊ตฌ์กฐ

๋นŒ๋“œ ๋ฐ ์„ค์น˜

Debug ๋นŒ๋“œ:

./gradlew assembleDebug

APK ์œ„์น˜:

app/build/outputs/apk/debug/app-debug.apk

์‹ค๊ธฐ๊ธฐ ์„ค์น˜:

adb install -r app/build/outputs/apk/debug/app-debug.apk

์•ฑ ์‹คํ–‰:

adb shell monkey -p com.example.seniorlocationapp 1

์‹ค๊ธฐ๊ธฐ ํ…Œ์ŠคํŠธ/์‹œ์—ฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  1. ์ธ์ฆ: ์ด๋ฉ”์ผ ํšŒ์›๊ฐ€์ž… โ†’ ์˜จ๋ณด๋”ฉ ์ €์žฅ โ†’ ๋กœ๊ทธ์•„์›ƒ โ†’ ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ๊นŒ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง€๋„ ๊ธฐ๋ณธ ํ๋ฆ„: ์œ„์น˜ ๊ถŒํ•œ ํ—ˆ์šฉ ํ›„ ํ˜„์žฌ ์œ„์น˜ ์ด๋™, ์ฃผ๋ณ€ ์žฅ์†Œ ๋งˆ์ปค, ํ•˜๋‹จ ์ถ”์ฒœ 3๊ณณ ํ‘œ์‹œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•„ํ„ฐ: ์ง€๋„ ์ƒ๋‹จ ํ•„ํ„ฐ ๋ฒ„ํŠผ โ†’ ์นดํ…Œ๊ณ ๋ฆฌ/๋ฐ˜๊ฒฝ/์˜์—…์ค‘ ์˜ต์…˜ ์ ์šฉ โ†’ ์ง€๋„ ๋งˆ์ปค์™€ ์ถ”์ฒœ ๋ชฉ๋ก์ด ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ฐฑ์‹ ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฒ€์ƒ‰/์ƒ์„ธ: ์žฅ์†Œ ๊ฒ€์ƒ‰ โ†’ ๊ฒฐ๊ณผ ํƒญ/๊ฑฐ๋ฆฌ์ˆœ ํ™•์ธ โ†’ ์ƒ์„ธ ํ™”๋ฉด์—์„œ ์‚ฌ์ง„, ํ‰์ , ๋ฆฌ๋ทฐ, ๊ฑฐ๋ฆฌ, ๊ธธ์ฐพ๊ธฐ ๋ฒ„ํŠผ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ์ฆ๊ฒจ์ฐพ๊ธฐ ๋™๊ธฐํ™”: ์ƒ์„ธ ํ™”๋ฉด ํ•˜ํŠธ ์ถ”๊ฐ€ โ†’ MyPage ์ฆ๊ฒจ์ฐพ๊ธฐ ํ‘œ์‹œ โ†’ HomeActivity ํ•˜ํŠธ/๊ณ ์ • ์ƒํƒœ ๋ฐ˜์˜์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  6. ํ™ˆ ์•ˆ๋‚ด: MyPage์˜ ์ž ๊ธˆํ™”๋ฉด ๋ณด๊ธฐ ๋ฒ„ํŠผ์œผ๋กœ HomeActivity ์ง„์ž… โ†’ ํฐ ๊ธ€์”จ ์‹œ๊ฐ„, ์ถ”์ฒœ ๋ชฉ๋ก, ์ •๋ ฌ/์นดํ…Œ๊ณ ๋ฆฌ ์นฉ, ์ƒˆ๋กœ๊ณ ์นจ ์ƒํƒœ ๋ฌธ๊ตฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  7. ์Œ์„ฑ/๋Œ€์ค‘๊ตํ†ต ์•ˆ๋‚ด: HomeActivity์—์„œ ๋ฐฉํ–ฅ ์˜์—ญ์„ ๋ˆŒ๋Ÿฌ TTS๋ฅผ ํ™•์ธํ•˜๊ณ , ๋Œ€์ค‘๊ตํ†ต ๊ฒฝ๋กœ์—์„œ๋Š” [ํƒ‘์Šนํ–ˆ์–ด์š”] โ†’ [๋‚ด๋ ธ์–ด์š”] โ†’ [๋‹ค์‹œ ๋“ฃ๊ธฐ] ํ๋ฆ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  8. ๋ฐฑ๊ทธ๋ผ์šด๋“œ/์œ„์ ฏ: ์„ค์ •์—์„œ ์œ„์น˜ ์—…๋ฐ์ดํŠธ ๊ฐ„๊ฒฉ ๋ณ€๊ฒฝ โ†’ ์œ„์ ฏ์˜ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„๊ณผ HomeActivity ์•ˆ๋‚ด ๊ฐฑ์‹  ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  9. ์žฌ๋ถ€ํŒ… ์•Œ๋ฆผ: ์•ฑ์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ์•Œ๋ฆผ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•œ ๋’ค ์žฌ๋ถ€ํŒ… โ†’ โ€œ์œ„์น˜ ์•ˆ๋‚ด๋ฅผ ์‹œ์ž‘ํ• ๊นŒ์š”?โ€ ์•Œ๋ฆผ ํด๋ฆญ ์‹œ HomeActivity ์ง„์ž…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  10. ๋กœ๊ทธ์ธ UI ์ •๋ฆฌ: ๋กœ๊ทธ์ธ ํ™”๋ฉด์— ๋ฏธ๊ตฌํ˜„ ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ณด์ด์ง€ ์•Š๊ณ  ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…๋งŒ ๋…ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

mergeDebugResources ์‹คํŒจ

์ฆ๋ถ„ ๋ฆฌ์†Œ์Šค ์บ์‹œ๊ฐ€ ๊นจ์ง„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

./gradlew clean
./gradlew assembleDebug

403 PERMISSION_DENIED ๋˜๋Š” API ํ˜ธ์ถœ ์‹คํŒจ

ํ™•์ธ ํ•ญ๋ชฉ:

  • Google Cloud์—์„œ Maps SDK, Places API, Routes API ํ™œ์„ฑํ™” ์—ฌ๋ถ€
  • API ํ‚ค์˜ Android ์•ฑ ์ œํ•œ ํŒจํ‚ค์ง€๋ช…/SHA-1 ์ผ์น˜ ์—ฌ๋ถ€
  • local.properties์˜ MAPS_API_KEY ์„ค์ • ์—ฌ๋ถ€
  • ์„ค์ • ๋ณ€๊ฒฝ ํ›„ 5~10๋ถ„ ๋Œ€๊ธฐ

์žฌ๋ถ€ํŒ… ํ›„ ์•Œ๋ฆผ์ด ์•ˆ ๋ณด์ด๋Š” ๊ฒฝ์šฐ

  • ์•ฑ์„ ํ•œ ๋ฒˆ ์ด์ƒ ์‹คํ–‰ํ–ˆ๋Š”์ง€ ํ™•์ธ
  • Android 13 ์ด์ƒ์—์„œ ์•Œ๋ฆผ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธ
  • ์ผ๋ถ€ ์ œ์กฐ์‚ฌ ๋ฐฐํ„ฐ๋ฆฌ ์ตœ์ ํ™” ์ •์ฑ…์— ๋”ฐ๋ผ ๋ถ€ํŒ… ์•Œ๋ฆผ์ด ์ง€์—ฐ/์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ

์œ„์น˜๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ์œ„์น˜ ๊ถŒํ•œ์ด ํ—ˆ์šฉ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • ๊ธฐ๊ธฐ์˜ GPS/์œ„์น˜ ์„œ๋น„์Šค ํ™œ์„ฑํ™” ํ™•์ธ
  • ์‹ค๋‚ด/์ง€ํ•˜์—์„œ๋Š” GPS ์ •ํ™•๋„๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ์Œ

ํ˜„์žฌ ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

  • ์ง€ํ•˜์ฒ  ์ถœ๊ตฌ ๋ฒˆํ˜ธ๋Š” Routes API ์•ˆ๋‚ด ๋ฌธ๊ตฌ์— ํฌํ•จ๋  ๋•Œ๋งŒ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€ํ•˜์ฒ  ํƒ‘์Šน ์ค‘์—๋Š” GPS๊ฐ€ ๋ถˆ์•ˆ์ •ํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž์˜ [ํƒ‘์Šนํ–ˆ์–ด์š”], [๋‚ด๋ ธ์–ด์š”] ์ˆ˜๋™ ๋ฒ„ํŠผ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Android ์ •์ฑ…์ƒ ์žฌ๋ถ€ํŒ… ์งํ›„ Activity๋ฅผ ์ง์ ‘ ๋„์šฐ๊ธฐ๋ณด๋‹ค ์•Œ๋ฆผ ํด๋ฆญ ๋ฐฉ์‹์œผ๋กœ HomeActivity์— ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • MainActivity ๋ผ์šฐํŒ… ์ •์ฑ…์€ ์ตœ์ข… ๋ฐฐํฌ ์ „ ๋กœ๊ทธ์ธ/์˜จ๋ณด๋”ฉ ์ƒํƒœ์— ๋งž๊ฒŒ ์ ๊ฒ€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ


๋ผ์ด์„ ์Šค

ํ•™์Šต ๋ฐ ๋ฐ๋ชจ ๋ชฉ์ ์˜ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages