이지랑드로랑 - 개발팁 1편 . 안드로이드의 홈키(Home key) 활성화 시키는 방법

 

오랜만에 안드로이드 강좌쪽에 자료를 올리네요.

RS-232를 사용한 강좌는 중단되었는데요, 제가 최근 안드로이드 관련된 삽질을 좀 하고 있어서 미루고 있습니다.

언젠가 한번에 파바박 터트리기로 하고, 조금 시간이 덜드는 부분으로 올리려고 합니다. (헉! 뭔가 핑계거리만 늘어나는...)

바로 안드로이드 개발팁으로 해서 짧지만 알면 유용한 자료를 좀 올리도록 하겠습니다.

안드로이드 포팅을 하다 보면 참 짜증나는 부분이 많은데요, 간단한 개발노트 정도 수준으로 올리려 합니다.

많이 봐 주세요! ^^

 

저희 FALinux에서는 최근 EZ-S3C6410이 7인치 셋트를 판매하고 있습니다.

거기에는 기본적으로 8개의 키가 달려있는데요, 여기에 Home, Back, Menu와 4방향 키, OK 키가 매칭되어 있습니다.

상당히 이것저것 할 때 유용하게 사용할 수 있습니다.

 

Step 1. 홈키가 먹히지 않는다?

 

그런데 우리가 분명히 커널에서 키 드라이버도 잘 만들어서 신호 잘 나오는 것 확인했고, 안드로이드에서도 키 번호가 잘 매치되어 있는 것을 확인했습니다.

그런데... 그런데!!! 다른 키는 잘 되는데 Home 키만 먹히지 않습니다. 이런 젠장!

 

원인은 안드로이드가 특정 설정값에 그 Home 키를 활성화 할지 비활성화 할지를 결정한다는 겁니다.

이럴수가... 왜 그런 짓을 해놨을까요? (2.2 Froyo에서는 기본으로 Home 키가 살아남)

원인을 알아보니 Home키는 Screen Lock 화면이 나타나야만 Home 키가 살아나는 것을 확인했습니다.

뭐, 원인을 알았으니 해결하죠.

 

Step 2. SQLite3를 이용해 홈키를 살리자.

 

우리는 소스 코드에 무한 수정을 가해서 이 문제를 해결할 수 도 있겠지만 생각보다 간단하게 이 문제를 해결할 수도 있습니다.

바로 SQLite3를 이용해서 안드로이드의 설정 DB 파일에 특정한 값을 추가, 수정하면 되는 것 입니다.

 

먼저 SQLite3를 이용해 setting.db 파일을 수정해야 합니다.

setting.db 파일에는 다양한 안드로이드 설정 파일이 존재하고 있는데요, 여기에서 device_provisioned 란 필드값이 1이 되면 Home키가 살아납니다.

sh-4.0# sqlite3 /data/data/com.android.providers.settings/databases/settings.db

sqlite3> INSERT INTO secure (name, value) VALUES ('device_provisioned', 1);

네! 이제 우리의 보드를 껏다 켭니다.

다시 부팅된 안드로이드는 Screen Lock 화면이 나타나게 됩니다. 이 화면은 메뉴키를 누르면 사라지게 됩니다.

자! 이제 브라우저에서 여기저기 돌아다니다가 Home 버튼을 한번 눌러보세요! 메인 화면으로 돌아오죠?

드디어 해결했습니다. ^^ 와~

 

 Screen Lock.jpg

[그림1. Screen Lock 화면이 나타난 모습]

 

PS. 이것을 기억해요!

 

홈키의 활성화 여부는 /data/data/com.android.providers.settings/databases/settings.db 에 있는 device_provisioned 값에 영향을 받는다는 사실을 잊지 마시고요!

1이면 True, 활성화! 0이면 False, 비활성화 입니다.

처음 한번 INSERT 문으로 레코드를 추가해서 만들었으니까 그 다음부터는 UPDATE 문으로 값만 갱신하면 되겠죠? ^^

sqlite3> update "secure" set value="1" where name="device_provisioned";

sqlite3> update "secure" set value="0" where name="device_provisioned";

직접 안드로이드의 소스코드를 뜯어고쳐도 되지만 우리의 시간은 소중합니다.

간단히 해결할 수 있다면 간단히 문제를 해결합시다. ^^v