안녕하세요- 안펍여러분.
Q: getLine1Number()로 전화 번호가 읽어지지 않는 경우에 대한 대처법은 무엇이 있을까요?
우선 저는 아래와 같은 형식으로 전화 번호를 읽어오는 코드를 오류없이 써왔는데 (정상작동 : 갤U,갤S,옵티머스,스카이)
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); myPhoneNumber = tm.getLine1Number();
그런데 오늘...ㅠㅠ...
HTC 디자이어HD의 사용자로부터 전화 번호가 인식되지 않는다는 버그 리포팅을 받게 되어 정확한 문제 소지를 파악치는 못했지만 위 소스에 문제가 있을 것이라는 생각으로 열씸히 구글링을 달리고 안드로이드 펍 게시판을 찾게 되었습니다.
- 혹시 HTC 디자이어HD를 사용하고 계신 분들~~ getLine1Number()이 null값을 반환하는 것인지 exception을 발생시키는지 혹은 정상 작동되는지 답변해주시길 부탁드립니다.
- 혹시 위와 같은 이슈로 고생해보셨다거나 해결책을 갖고 계신 분 정보를 나누어 주시거나 간단한 힌트라도 제공해주시길 부탁드립니다.
아래에 제가 구글링을 통해 찾은 자료를 간략히 정리해놓겠으니 참고하시고 .. 음 소중한 답변, 관심 부탁드리겠습니다.
1. TelephonyManager말고 다른 경로를 통해 얻자 -> Q: 아래의 소스가 향후 패치에서도 유효할까요? 혹은 다종의 기기에서 유효할까요?
TelephonyManager telephonyMgr = (TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE); String userId = telephonyMgr.getLine1Number(); if(userId == null || userId.trim().equals("")){ userId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);}
http://groups.google.com/group/android-developers/browse_thread/thread/ec753b0ff460ffdf?pli=1
2. Cursor를 통해 Owner의 Info를 읽어오는 방법? -> 링크된 주소의 소스는 deprecated
http://stackoverflow.com/questions/3272372/android-getting-phone-owner-info
3. 같은 제목의 블로그 게시물입니다. 통신사별 USIM의 데이터 처리 방식이 다르다는 설명?
:-(
...일단은 USIM칩을 갈아끼우고 혹시 유심등록이 미비된 경우 발생할 수 있다고 설명드렸는데, 이거 참.
예전에 어느 게시물에서 안드로이드 개발은 처음엔 쉬운 듯 하지만 가면 갈 수록 난관이라고 하시던 한 고수분의 말씀이 눈가에 스치네요..
기기의 파편화...제대로 된 테스트도 할 수 없고 ㅠㅠ 아이폰 학습도 병행하려고 하는데 아이폰 쪽은 어떨런지...
WOW- 포도맛카라님의 답변으로 십년묵은 체증이 다 가시는 듯 합니다 ㅎㅎ :) 고유 전화번호가 저장된 매체가 심카드일것이다라는 막연한 추측만 해왔는데, 포도맛카라님께서 명쾌하게 알려주셨네요. 더욱이 KT의 번호이동에 대한 기술적 이슈...캬 살아있는 정보ㅋ
제 어플의 용도는 SNS에요. 모해라고 테스트버전이고 아직 작업이 진행중이어서 뭐 그리 내세울 건 없지만, 이런 어플 꼭 있어야 겠다라고 생각해서 어떻게든 만들어가곤 있습니다 ㅋ
그리고 프리퍼런스나 sqllite를 이용할까 생각해봤는데, 만약 이미 가입한 사용자가 프리퍼런스나 sqllte-db를 삭제 혹은 공장 초기화 후에 다시 어플리케이션을 설치하게 된 경우 또 다시 가입 절차를 밟게 될 것이고...이렇게 되면 ㅠㅠa
아직 포도맛카라님이 제시해주신 수동적인 방법의 유레카를 찾지 못했지만,,,흠;;; 이거 참 어렵지만 재밌네요. 감사합니다.
1번의 경우에는 getLine1Number()로 전화번호를 찾지 못했을 경우 ANDROID_ID라는 고유번호를 가져오는 방법인데.. 전화번호랑은 별개의 이야기라... 전화번호가 아닌 단말기를 구분하기 위한 용도로 사용하는 거라면 어느정도 효과는 있겠지만... 질문자님에게 해결책이 될 수 있을 것 같지 않네요.(몇몇 단말에서 2,2 이하로는 버그가 있다고 알고 있어요)
2번의 경우 사용자가 단말기에 개인 정보(예를들어 전화부에서 내프로필 등록하기를 통해 전화번호를 입력하였을때..)를 등록하였을시에만 조회가 가능하기에 이것 역시 해결책이 못됩니다.
환경설정 - 휴대폰정보 - 상태 에 나오는 내 휴대폰 번호는 심카드에서 읽는게 맞구요. 이 부분이 누락된 사용자의 경우는 위와같이 null값이 getLine~~ 을 통해 넘어오게 되는거죠.
답변하신게 최선입니다.. usim을 새로 교환하시던지 하는 방안이.. 듣기에는 최근에 kt에서 010이외의 번호를 점차적으로 모두 사용 정지 시키고 번호이동을 시키는 것도 2g의 망유지 문제말고도 이런 심카드 호환과도 관련이 있다고 하더군요.
무슨 용도의 어플인지 모르겠지만, 모든 사용자를 수용하기 위해서 조금은 수동적인 방법으로 해결하시려면, null이 들어올 때 사용자에게 직접 자기 전화번호를 입력하도록 구현하고 그 값을 프리퍼런스나 db등을 이용해 저장하시는게 어떨까 하네요.