태그 보관물: 안드로이드

Android ROOM 자료가 입력된 DB 사용하기

개요

이전에 다루었던 Android ROOM 초기 자료 입력하기 글에서는 적은 양의 자료에만 적용할 수 있습니다. 자료가 많은 경우 텍스트 파일을 읽어 DB에 입력하는 방법을 생각해 볼 수 있습니다. 또 서버에 연결해서 자료를 받아와 입력하는 등 여러가지 방법이 있을 수 있습니다. 그러나 앱에서 처리하게 되면 모든 사용자들이 입력이 끝날 때 까지 기다려야 하는 문제가 있습니다.

DB에 입력되는 자료가 고정되어 있고 양이 많은 경우 개발 시 미리 입력해 놓은 DB를 적용하면 간편합니다. 이번글에서는 그 방법을 알아보도록 하겠습니다.

데이터 미리 채우기

SQLite DB에 자료를 입력하는 방법은 여러가지가 있습니다. 필자는 Android Studio 에 있는 Database Inspector 를 이용해서 다량의 자료를 DB에 입력했습니다. 미리 입력된 DB를 사용하는 방법은 개발자 문서에 잘 설명되어 있습니다.

DB 파일 준비

필자는 에뮬레이터에 저장되어 있는 DB 파일을 Device File Explorer 로 접근해서 로컬 PC에 저장했습니다. 그 다음 Android Studio 에서 assets 폴더를 생성하고 DB 파일을 복사했습니다.

assets 폴더 하위에 추가한 DB 파일
assets 폴더 하위에 추가한 DB 파일

코드추가

DB 초기 생성 부분에 다음과 같이 코드를 추가합니다.

fun getInstance(context: Context): yourDB? {
    if (INSTANCE == null) {
        synchronized(yourDB::class) {
            INSTANCE = Room.databaseBuilder(context.applicationContext,
                yourDB::class.java, "your.db")
                .addCallback(dbCallback)
                .createFromAsset("your.db")
                .fallbackToDestructiveMigration()
                .build()
        }
    }
    return INSTANCE
}

이렇게 하면 미리 자료를 입력해 놓은 DB 파일을 이용하게 됩니다. 앱에서 별도로 자료를 입력하는 과정을 수행할 필요가 없어지게 됩니다. 단, 정의된 Entity 와 미리 자료가 채워진 DB 파일의 구조가 같아야 합니다.

이번글에서는 미리 준비된 DB 파일을 ROOM 을 사용한 프로젝트에 적용하는 방법을 알아보았습니다.

사운드 카운터 안드로이드 앱

개요

가끔 일정한 소리가 몇번이나 반복되었는지 세어야 할 경우가 있었습니다. 문득 특정한 소리의 개수를 세어주는 앱이 있으면 좋겠다는 생각이 들어 만들게 되었습니다. 이름은 사운드 카운터로 정했고 소리가 나면 +1 을 해서 그 숫자가 나타납니다.

구상

측정하려는 소리의 크기가 다양해서 숫자를 더하는 소리의 크기를 조절할 수 있도록 해야할 것 같았습니다. 그리고 그 설정값을 보여주고 실제 소리가 났다는 것을 보여주는 부분이 필요할 것 같았습니다. 마지막으로 세어진 소리의 개수를 보여주는 부분이 있어야 할 것 같았습니다.

개발

작업을 진행하다 보니 잠깐 멈출 수 있는 기능이 있어야 할 것 같았습니다. 구상한 것을 다음 화면과 같이 작업 했습니다.

사운드 카운터 초기 화면

소리 입력은 마이크로 받았고 별도로 저장되지 않도록 작업했습니다. 문제가 없다고 생각했는데 특정버전 이상에서 테스트 해보니 녹음을 시작하는 부분에서 오류가 발생했습니다. 출력 방향을 /dev/null 로 지정했는데 Android Q 이상에서는 오류가 발생했습니다. OS 버전을 판단해서 동작하도록 수정했습니다.

입력된 소리를 시각적으로 표현하는 부분은 세기에 따라 위쪽으로 Peak가 올라가는 형태로 구현했습니다.

소리 시각화

박수 소리로 테스트 해 보았는데 문제없이 동작했습니다. 좀더 크거나 작은 소리는 감도를 조절해서 개수를 셀 수 있도록 사용하면 될 것 같습니다.

다음 주소에서 확인하실 수 있습니다(광고포함).

https://play.google.com/store/apps/details?id=jaeyoung.kim.soundcounter