마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

폰 기본 진동 모드의 수정 (선택을 바꾸는 것 아님)

0 추천

이 질문은 아마 고수분이 봐주셔야 할 것 같은데요.

폰이 진동 모드일 때 선택할 수 있는 진동 패턴들이 몇 개 있습니다. 폰 제조사에서 미리 마련해 놓고 사용자가 이를 선택할 수 있는 기본 패턴들 말이죠.

 

질문 ) 이 기본 진동  패턴들을 access 하고자 합니다. 즉 read, write, update 까지 하려고 합니다.

 

다음은 제가 이를 위해 시도 해 본 것들입니다.

 

1. 구글 안드로이드 홈을 이 잡듯이 뒤져봤는데 이런 서비스를 직접 제공하는 API는 없었습니다. 아마 간접적인 방법으로 구현해야 하는것으로 보입니다.

2. AudioManager 의 setRingerMode (int ringerMode) 를 통해 폰 상태를 진동<->소리로 전환하는 메소드는 있었지만 이것은 제가 원하는 서비스가 아닙니다.

3. AudioManager 의 타 메소드들도 자세히 검토해 봤지만 진동 모드를 직접 access 할 방법을 찾지 못했습니다.

4. NotificationManager 에  진동 패턴을 실어 알림음을 진동으로 설정하거나 하는 방법은 있었지만, 알림이 아닌 call 시의 진동패턴에는 access 할 방법이 없었습니다.

5. RingtoneManager.getCursor()  를 이용해 call 시 울리는 사운드 컨텐츠를 직접 access할 수 있었습니다. 하지만 여기서도 진동 패턴 컨텐츠 access 는 불가했습니다.

6. StackOverflow 사이트 검색에서도 제대로 된 답을 찾지 못했습니다.

 

이 중에 5번이 그나마 가장 의미있는 시도였는데, xxx.getCursor() 를 통해 진동패턴이 담긴 db를 직접 access할 방법만 찾으면 될것으로 보이지만 지금까지 검토결과를 보면 이 xxx 를 찾는것은 거의 불가능한것 같이 보입니다.

여태까지의 삽질을 통해 알아낸 내용은, 진동 패턴들이 담긴 컨텐츠 프로바이더 (uri로 가져올 수 있는) 를 찾기만 하면 된다는 점인데 이것을 어떻게 구현해야 하는지 전혀 불투명합니다.

폰의 기본 진동 모드를 수정하는것이기 때문에 volume setting activity를 띄워 사용자가 선택하도록 하는것 역시 제 의도와 무관하기 때문에 올바른 해답이 될 수 없습니다.

고수분의 답변을 기다리겠습니다.

neocog (160 포인트) 님이 2013년 12월 27일 질문

1개의 답변

0 추천

역시 예상대로 답변이 안달리는군요. 자답형태로 답 글을 답니다.

자체 검토결과 이 방법은 불가능한 것으로 결론 내렸습니다. 검색해서 나오지 않았다는 점도 있지만

 

- 실 폰으로 기본 진동패턴 setting 할 때 뿌려지는 로그를 확인해 보니 폰 제조사 제공함수 내의 로그가 찍혔습니다.  이건 제조사가 자체적으로 구현했거나 customize 했다는 얘기밖에 안됩니다.

- 아마 uri 에 접근할 방법은 있을 것입니다. 어쨋든 db아니면 파일 형태일 테니까요. 하지만 위의 사항으로 인해 해당 uri 위치가 폰 마다 틀어지거나 심지어 없을 가능성이 큽니다.

- 비슷한 기능을 갖는 다른 대표 앱들을 작동시켜보고 확인해 봤는데, 직접적으로 이 기능을 쓰는 앱은 없었고 모두 call hooking을 하거나 아예 자체 폰 기능을 내장하고 있었습니다. 유명앱들이 모두 그렇게 하고 있다면 이 방법은 recommend되지 않거나 쓸 수 없는 방법입니다.

결론적으로 call hooking 을 통해 간접적으로 이 기능을 흉내내는 대안을 썼습니다.

call hooking은 broadcast receiver를 써서 아래와 같이 비교적 쉽게 구현 가능합니다.

http://androidlabs.org/short-experiments/broadcast-receivers/do-something-when-the-phone-rings/

링크 코드 상에서 "// TODO This would.. " 코멘트에 진동을 시켜주는 루틴을 넣으면 잘 작동합니다.

물론 기본적으로 생각할 수 있는 여러 방어코드가 같이 들어가야겠죠.

폰 앱의 기본 작동을 간섭하거나 방해하지 않도록 해야 할겁니다.

neocog (160 포인트) 님이 2013년 12월 28일 답변
...