[Android SDK] [안드로이드] 핸드폰 번호, 기기 고유 id 등 단말기 정보 가져오기

안드로이드 앱 개발하면서 사용자의 핸드폰 번호, 기기 고유 id 등 정보를 많이 필요한데요. (앱 홍보 또는 여러 계정으로 앱에 가입 시 이벤트 제한 등등)

 

그래서 단말기 정보 가져오는 것을 알아볼 것입니다.

 

** 참고

Android 11에서는 앱에서 전화번호를 읽을 때 사용하는 전화 관련 권한이 변경됩니다.

앱이 Android 11 이상을 타겟팅하고 다음 목록에 표시된 전화번호 API에 액세스해야 한다면 READ_PHONE_STATE 권한 대신 READ_PHONE_NUMBERS 권한을 요청해야 합니다.

참고 : developer.android.com/about/versions/11/privacy/permissions?hl=ko

 

휴대폰 정보 가져오기

위의 참고사항처럼 우리는 Android 11 버전에 대응할 것입니다.

타겟 버전이 30인 경우 READ_PHONE_NUMBERS 권한을 요청하고, 그 이하 버전은 READ_PHONE_STATE 권한을 요청할 것입니다. 

 

먼저 메니페스트 파일에 다음과 같이 use-permission 추가를 합니다.

 <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
 <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />

 

사용자의 안드로이드 버전에 따라 권한을 다르게 요청합니다.

권한 요청은 이전 포스팅을 활용하시면 됩니다.

develop-writing.tistory.com/39

public boolean chkPermission() {
        // 위험 권한을 모두 승인했는지 여부
        boolean mPermissionsGranted = false;
        String[] mRequiredPermissions = new String[1];
        // 사용자의 안드로이드 버전에 따라 권한을 다르게 요청합니다
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
       		// 11 이상인 경우
            mRequiredPermissions[0] = Manifest.permission.READ_PHONE_NUMBERS;

        }else{
        	// 10 이하인 경우
            mRequiredPermissions[0] = Manifest.permission.READ_PRECISE_PHONE_STATE;
        }


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 필수 권한을 가지고 있는지 확인한다.
            mPermissionsGranted = hasPermissions(mRequiredPermissions);

            // 필수 권한 중에 한 개라도 없는 경우
            if (!mPermissionsGranted) {
                // 권한을 요청한다.
                ActivityCompat.requestPermissions(MainActivity.this, mRequiredPermissions, PERMISSIONS_REQUEST_CODE);
            }
        } else {
            mPermissionsGranted = true;
        }

        return mPermissionsGranted;
}

 

 

TelephonyManager라는 클래스를 아래와 같이 Context.TELEPHONY_SERVICE를 이용하여 호출합니다.

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

 

이제 TelephonyManager에서 제공하고 있는 함수들을 이용하여 원하는 데이터를 가져오면 됩니다. 

전화번호는 getLine1Number()를 사용해 가져올 수 있는데 위에서 선언한 권한을 사용자에게 허가받아야 합니다.

그래서 전화번호를 가져오기 전에 권한을 요청하겠습니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

READ_PHONE_NUMBERS 또는 READ_PHONE_STATE 권한을 사용자에게 허가 받았다면 전화 번호를 가져올 수 있습니다.

밑의 기타 정보는 권한을 허가받지 않더라도 가져올 수 있습니다.

// READ_PHONE_NUMBERS 또는 READ_PHONE_STATE 권한을 허가 받았는지 확인
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
	return;
}

Log.d(TAG, "음성통화 상태 : [ getCallState ] >>> " + tm.getCallState());
Log.d(TAG, "데이터통신 상태 : [ getDataState ] >>> " + tm.getDataState());
Log.d(TAG, "전화번호 : [ getLine1Number ] >>> " + tm.getLine1Number());
Log.d(TAG, "통신사 ISO 국가코드 : [ getNetworkCountryIso ] >>> "+tm.getNetworkCountryIso());
Log.d(TAG, "통신사 ISO 국가코드 : [ getSimCountryIso ] >>> "+tm.getSimCountryIso());
Log.d(TAG, "망사업자 MCC+MNC : [ getNetworkOperator ] >>> "+tm.getNetworkOperator());
Log.d(TAG, "망사업자 MCC+MNC : [ getSimOperator ] >>> "+tm.getSimOperator());
Log.d(TAG, "망사업자명 : [ getNetworkOperatorName ] >>> "+tm.getNetworkOperatorName());
Log.d(TAG, "망사업자명 : [ getSimOperatorName ] >>> "+tm.getSimOperatorName());
Log.d(TAG, "SIM 카드 상태 : [ getSimState ] >>> "+tm.getSimState());

 

 

기기 고유 id 가져오기

Secure 클래스에서 제공하는 android_id를 사용하면 됩니다.

String android_id = Settings.Secure.getString(this.getContentResolver(),Settings.Secure.ANDROID_ID);

결과 값은 다음과 같이 나옵니다.

 

 

 

 

전체 소스는 깃헙에서 확인하시면 됩니다.

github.com/keepseung/Android-Blog-Source

[출처] https://develop-writing.tistory.com/40

 

 

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
33 [Android Studio] Google Play Console - 앱 API 수준 업데이트하기 (앱 업데이트 출시, 앱 API 수준 이상 타겟팅 방법, API 31 To 33) file 졸리운_곰 2024.08.28 203
32 [android studio] 안드로이드 앱 배포, APK와 AAB file 졸리운_곰 2024.05.03 208
31 [android studio] 안드로이드 스튜디오 패키지명 변경 방법 file 졸리운_곰 2024.01.28 130
30 [android studio] 안드로이드 앱 내부 배포 시 Play프로텍트에 인증받고 배포하기 file 졸리운_곰 2023.03.23 228
29 [android studio] [Java][Android] 안드로이드 다국어 지원 file 졸리운_곰 2023.03.21 137
28 [android studio] [안드로이드 스튜디오] 다국어 지원 strings.xml 파일 생성 방법 file 졸리운_곰 2023.03.21 220
27 [android studio] 구글 플레이 스토어 등록 어떻게? 2편 - 키스토어 생성과 릴리즈 빌드 하기 file 졸리운_곰 2023.03.21 148
26 [android studio] 구글 플레이 스토어 등록 어떻게? 1편 - 준비해야 할 것들 졸리운_곰 2023.03.21 136
25 [android studio] 웹페이지를 apk 앱으로 | 쉽게 따라하는 웹앱 만들기 file 졸리운_곰 2023.03.21 227
24 [android studio] 안드로이드 아이콘이 2개 생성될 때 졸리운_곰 2023.03.21 172
23 [android studio] Convert Any Website to Android App using Android Studio file 졸리운_곰 2023.03.18 199
22 [android studio] How to Convert Any Website to Android App in Android Studio? file 졸리운_곰 2023.03.18 144
21 [android studio] 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8. file 졸리운_곰 2022.11.17 141
20 [android sdk] 안드로이드에서 JWT 사용하기 졸리운_곰 2022.07.15 176
19 [Android Studio] Android Native App 에서 mysql , php 연결 : PHP MySQL REST API for Android file 졸리운_곰 2021.12.02 267
18 Android PHP MySQL 예제 - 데이터베이스에서 데이터를 JSON 형식으로 가져오기 file 졸리운_곰 2021.07.24 340
17 Android PHP MySQL 예제 - 데이터베이스 질의(query) 결과 출력하기 file 졸리운_곰 2021.07.24 679
16 [android] 안드로이드에서 mysql 데이터베이스 입력, 접속 / Android PHP MySQL 예제 - 데이터베이스에 데이터 입력하기 file 졸리운_곰 2021.07.24 236
15 Android 에서 Opencv 설치하고 간단한 예제 실행해보기!! file 졸리운_곰 2020.10.31 511
14 [Android] Fragment 를 이용한 탭 만들기 file 졸리운_곰 2020.09.19 219
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED