상세 컨텐츠

본문 제목

안드로이드폰 진동/무음모드 제거

개발이야기/안드로이드 시스템, 장비

by mycatdid0 2022. 7. 25. 15:45

본문

반응형

(포스팅 2022.07.25)

 

 

업무 기록입니다.


 민원 발생 

 

고객사로부터 민원을 받았습니다.

 

아래 사진을 보시면, 볼륨버튼을 누르면 나오는 볼륨안내 창입니다. 이 버튼이 실수로 눌려져서 벨소리가 안나서 전화를 못받았다고 합니다.

 

 

나 : 그런 일이 있으셨군요. 어떻게 도와드리면 될까요?

고객사 : 버튼을 없애 주세요.

나 : ??? 네 아무튼 알겠습니다.

일단 대답부터 하고, 상황을 어떻게 해결할 지 고민해 봅니다.

 

코드야 찾을 수 있겠지만, 제가 APK 개발자가 아니다보니 GUI를 건드리는 건 자신이 없습니다. 뭐, 아무튼, 문제가 다시 발생하지 않으면 되지 않을까요?

 

해당 버튼을 눌러도 '진동/무음 모드'로 진입하지 않도록 코드를 수정하기로 하였습니다.

 


 코드 분석 - 1 

 

해당 버튼을 누르면 "전화 및 알림이 오면 진동이 사용됩니다." 라는 토스트가 뜬다는 것을 알게 되었습니다. 인터넷도 검색하고 안드로이드 소스코드도 검색합니다.

 

android / platform / prebuilts / fullsdk / platforms / android-28 / refs/heads/androidx-camerax-release / . / data / res / values-ko / strings.xml
<string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"전화 및 알림이 오면 진동이 사용됩니다."</string>

 

진동모드로 들어가면 'volume_dialog_ringer_guidance_vibrate' 변수가 사용되겠네요. 다시 검색을 합니다.

 

ㅁㅁㅁㅁㅁ/frameworks$ grep -nr volume_dialog_ringer_guidance_vibrate
base/services/core/java/com/android/server/audio/AudioService.java:2569:                toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate;
base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java:517:                        com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate);
base/core/res/res/values-or/strings.xml:1873:    <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"??? ? ??????????????? ????????? ???"</string>
base/core/res/res/values-de/strings.xml:1872:    <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Anrufe und Benachrichtigungen per Vibrationsalarm"</string>
base/core/res/res/values-af/strings.xml:1872:    <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Oproepe en kennisgewings sal vibreer"</string>
....
base/core/res/res/values/symbols.xml:1042:  <java-symbol type="string" name="volume_dialog_ringer_guidance_vibrate" />

 

안드로이드 소스코드에서 관련 코드를 일부 찾았습니다.

 

FILE : ㅁㅁㅁㅁㅁ/frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
 494     private void maybeShowToastH(int newRingerMode) {
 495         int seenToastCount = Prefs.getInt(mContext, Prefs.Key.SEEN_RINGER_GUIDANCE_COUNT, 0);
 496
 497         if (seenToastCount > VolumePrefs.SHOW_RINGER_TOAST_COUNT) {
 498             return;
 499         }
 500         CharSequence toastText = null;
 501         switch (newRingerMode) {
 502             case RINGER_MODE_NORMAL:
 503                 final StreamState ss = mState.states.get(AudioManager.STREAM_RING);
 504                 if (ss != null) {
 505                     toastText = mContext.getString(
 506                             R.string.volume_dialog_ringer_guidance_ring,
 507                             Utils.formatPercentage(ss.level, ss.levelMax));
 508                 }
 509                 break;
 510             case RINGER_MODE_SILENT:
 511                 toastText = mContext.getString(
 512                         com.android.internal.R.string.volume_dialog_ringer_guidance_silent);
 513                 break;
 514             case RINGER_MODE_VIBRATE:
 515             default:
 516                 toastText = mContext.getString(
 517                         com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate);
 518         }

 

해당 모드에 관련된 값이 RINGER_MODE_NORMAL, RINGER_MODE_SILENT, RIGNER_MODE_VIBRATE 가 있다는 것을 알아냈습니다. SILENT와 VIBRATE로 진입하는 코드를 모두 막으면 문제가 해결될 것 같습니다.

 

여기까지 진행하였으나, 환경설정에서 볼륨을 줄이면 진동모드로 진입하는 것을 발견하였습니다.

 


 코드 분석 - 2 

 

진동모드 진입하는 코드에서는 이미 수정을 했으니, 관련 코드를 더 수정해보아야 합니다. NORMAL 모드로 진입할때 "전화 및 알림이 오면 벨소리가 울림"가 표시되므로 관련 검색을 합니다.

 

ㅁㅁㅁㅁㅁ/frameworks/base$ grep -nr "volume_dialog_ringer_guidance_ring"
services/core/java/com/android/server/audio/AudioService.java:2553:        int toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_ring;
packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java:508:                            R.string.volume_dialog_ringer_guidance_ring,

 

packages 쪽에 소스코드가 더 있음을 확인하였습니다.

 


 결과 

 

진동/무음모드로 진입하지 않도록 수정완료하였습니다.

관련하여 수정된 파일은 다음과 같습니다.

 

frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
frameworks/base/services/core/java/com/android/server/audio/AudioService.java

 

포스팅은 여기까지입니다.

 

 

언제나 감사드립니다.

반응형

관련글 더보기

댓글 영역