public void setPhoneNumSpinner() { // API LEVEL 22 이상에서 가능 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { // 단말기 정보를 가져오는 클래스 SubscriptionManager subscriptionManager = SubscriptionManager.from(this); // 전화 권한 체크 필수 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { // 현재 삽입된 SIM의 정보를 가져온다. Lis<subscriptioninfo> subInfoList = subscriptionManager.getActiveSubscriptionInfoList(); ArrayList<string> Numbers = new ArrayList<>(); // SIM의 정보 목록에서 가져온 전화번호의 앞자리 한국 코드를 0으로 변경한다. for (SubscriptionInfo subInfo : subInfoList) { Numbers.add(subInfo.getNumber().replace("+82", "0")); } // String Array Casting String[] arrListToArr = new String[Numbers.size()]; arrListToArr = Numbers.toArray(arrListToArr); // Spinner에 삽입 ArrayAdapter<String> selectAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrListToArr); selectAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mSpPhoneNum.setAdapter(selectAdapter); mSpPhoneNum.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 값 선택 시 로직 처리 부분 } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } } }
사용자의 휴대폰이 더블 유심(더블 심, 듀얼 심)일 경우(전화번호가 2개) 리스트로 가져와서 spinner에 집어넣는 함수.
2019. 01. 09 수정 사항
통신사마다 유심 전화번호 정책이 다른 듯하다.
더블심이 아닌 경우 아예 Null을 줘서 NPE Crash가 발생하거나
유심 전화번호 국가코드를 제공하지 않고 010으로 주는 둥...
유심 정책은 표준화 되지않은 걸까? 아쉬울 따름이다.
그래서 모든 예외를 주어서 아래와 같이 리팩토링 하였다.
public void setPhoneNumSpinner(Context context) { String[] arrListToArr; //더블심은 API LEVEL 22 이상부터 지원 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1){ // 전화 통신 정보를 가져오는 클래스 SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); //전화 권한 체크 필수 if(ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED && subscriptionManager != null){ // 현재 삽입된 SIM의 정보를 가져온다. List<SubscriptionInfo> subInfoList = subscriptionManager.getActiveSubscriptionInfoList(); ArrayList<String> numberArr = new ArrayList<>(); // SIM의 정보 목록에서 가져온 전화번호의 앞자리 한국 코드를 0으로 변경한다. for(SubscriptionInfo subInfo : subInfoList){ String tempPhoneNum = subInfo.getNumber(); //전화번호가 존재하면 if (!TextUtils.isEmpty(tempPhoneNum)) { // +82(한국 코드)가 없으면 if (!tempPhoneNum.contains("+82")) { // 앞자리가 0인 경우 그대로 삽입 if ("0".equals(tempPhoneNum.substring(0, 1))) { numberArr.add(tempPhoneNum); // 없으면 0 추가해서 삽입 } else { numberArr.add("0" + tempPhoneNum); } } else { // +82(한국코드)가 있는 경우 0으로 변경 후 삽입 numberArr.add(tempPhoneNum.replace("+82", "0")); } }else{ //존재하지 않으면 기존 전화번호 삽입 } } // String Array Casting arrListToArr = new String[numberArr.size()]; arrListToArr = numberArr.toArray(arrListToArr); // Spinner에 삽입 ArrayAdapter<String> selectAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrListToArr); selectAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mSpPhoneNum.setAdapter(selectAdapter); } }else{ //API LEVEL 22 미만 단말기 처리 } }
2020.08.11
코틀린으로 리팩토링
'Before 2022 > Android' 카테고리의 다른 글
안드로이드 뒤로가기(Back) 버튼 두번 눌러 앱 종료 (0) | 2018.12.12 |
---|---|
안드로이드 소프트 키 제어 (0) | 2018.12.12 |
안드로이드 블루투스 지원 여부, 현재 상태 체크 및 활성화, 비활성화 (0) | 2018.12.10 |
List to AlertDialog (0) | 2018.12.04 |
라이프 사이클 개념도 (0) | 2018.12.04 |