# PRJ_2. LBS 위치기반 서비스 앱

728x90

LBS 앱 만들기

🟦 20강. LBS 소개

🟩 LBS 앱 소개

  • LBS : Location Based Service
  • 위치를 기반으로 서비스 제공하는 서비스 의미
  • 현재 위치값을 기준으로 사용자 위치를 표시하고, 구글 open api를 활용하여 주변 정보를 표시한다.

🟦 21강. 프로젝트 생성

🟩 프로젝트 생성 및 ViewBinding 세팅

  • module 수준 gradle 파일에 다음의 코드 추가
buildFeatures{
viewBinding = true
}
  • MainActivity 에서 viewBinding 변수 선언 후, 초기화
class MainActivity : AppCompatActivity() {

    lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

🟦 22강. Splash 화면 구현

🟩 Splash 화면 구현

  • Splash 화면이란 애플리케이션 실행 시 로고를 지정 시간만 보여주고 시간이 지나면 사라지는 (기본 화면으로 전환) 화면을 의미한다.
  • 안드로이드는 Splash 화면 구현을 위해 1) Activity 를 이용하는 방법 2) 테마 구성하여 구현하는 방법 2가지를 제공한다.
  • Splash 화면으로 사용할 화면을 테마로 구성하여 MainActivity에 적용한 뒤, onCreate() 메소드에서 원래의 기존 테마로 재설정하는 방식으로 구현하도록 한다.

<Splash 화면 로딩 안되는 문제 해결 방법>

저도 안드로이드 스튜디오 가상머신으로는 잘 되는데, 제 휴대폰은 안되더라구요.(제 안드로이드 가상머신 : Galaxy Nexus API 27)

그리고, 아마 white만 뜨시는 것이 아니라 splash.xml 자체가 로딩이 안되실 것 같습니다.

예제에서 메인 엑티비티에서 잠시 SystemClock으로 시간 텀을 주고

다른 테마로 변경하고 UI요소들을 로딩하잖아요.

그런데, 가상머신 정도의 OS 버전일 때는 SystemClock으로 텀을 주면

drawable의 splash.xml이 적용되는 거 같은데,

최신버전에서는 이게 안되고 그냥 통째로 정지되는 것 같아 보이더라구요

(이건 제 주측이라.. 다른 원인 또는 문제일 수도 있습니다.)

그래서 아래의 두가지 방법으로 스플래시 화면이 안뜨는 것을 해결해봤는데요.

첫째는, 테마로 스플래시화면을 구현하는게 아니라 액티비티로 스플래시 화면 구현하기

(가장 쉬운 대안이지만, 이 방법이 별로다 싶으면 두번째를 추천드려요)

두번째는, splash를 위한 layout.xml을 만들어서 그걸 메인 액티비티에 적용시킨 후,

SystemClock 대신 Handler로 시간 텀을 준 뒤 원래 테마와 레이아웃을 로딩하는 방법.

(저는 첫번째 하다가 이 두번째가 그나마 원래 강사님의 의도와 가장 비슷하게 구현한것 같아서

이걸로 적용해 봤어요)

// 윗부분 생략
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setTheme(R.style.Theme_splash)
        setContentView(R.layout.layout_splash)

        Handler(Looper.getMainLooper()).postDelayed({

            // Splash 화면 이후로 보여질 원래 테마로 설정
            setTheme(R.style.Theme_App1_Memo)
            setContentView(binding.root)

            // Toolbar를 설정함.
            setSupportActionBar(binding.mainToolbar)
            title = "메모앱"

            //Recycler View 셋팅
            val main_recycler_adapter = MainRecylcerAdapter()
            binding.memoRecycler.adapter = main_recycler_adapter
            binding.memoRecycler.layoutManager = LinearLayoutManager(this)

        }, 1000)
 }
// 아래부분의 onResume() 이런 부분들 생략

여기서 원래 코드와 다른 부분은 onCreate() 밑에

setTheme()와 setContentView() 부분이고요. 사실 setTheme는 굳이 필요 없을 것 같아요.

저는 스플래시에 적용하고 싶은 테마스타일이 있어서 테마도 다시한번 적용시켜 주었습니다.

마지막으로 원래 작성했던 코드들을 전부 복사해서

Handler 안에다가 붙여 넣고 시간 텀은 1초정도 주고 로딩하도록 해줬어요.

이 방법으로 했을 때는 스플래시 화면이 보이더라구요!


🟦 23강. 지도 사용하기

🟩 구글 지도 사용

  • 애플리케이션에서 구글 지도를 표시하는 작업 수행한다.
  • 구글 지도를 사용하기 위해서는 애플리케이션 등록부터 시작하여 많은 작업을 수행해야 한다.

1) 애플리케이션 등록

2) AndroidManifest.xml에 발급받은 구글 키값 등록

<meta-data
    android:name="com.google.android.geo.API_KEY"
  android:value="발급받은 키값"/>

3) 코드 작성

  • AndroidStudio에 Google Play Service 패키지 설치
  • Tools → SDK Manager
728x90

'App(앱)_관련 공부 모음 > [강의] Android_App Project' 카테고리의 다른 글

앱_MySQL DB 생성  (0) 2022.07.18
안드로이드 앱_서버 프로그래밍  (0) 2022.07.18
# PRJ_1. 메모앱  (0) 2022.07.12
[개념] Splash 화면 구현  (0) 2022.07.06
[개념] ViewBinding  (0) 2022.07.05