안드로이드 애플리케이션에서 단말기의 정보가 필요할 경우 정보를 가져다 사용할 수 있다.
안드로이드 8.0 부터 단말기 일련번호, 유심 일련번호 등 단말기의 고유한 정보는 사용할 수 없다.
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
// 권한 허용여부를 확인해 거부한 것이 하나라도 있으면 단말기 정보를 출력하지 않는다.
val chk1 = ActivityCompat.checkSelfPermission(
this@MainActivity,
Manifest.permission.READ_SMS)
val chk2 = ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.READ_PHONE_NUMBERS)
val chk3 = ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.READ_PHONE_STATE)
if(chk1 == PackageManager.PERMISSION_GRANTED &&
chk2 == PackageManager.PERMISSION_GRANTED &&
chk3 == PackageManager.PERMISSION_GRANTED){
// 전화번호
textView.text = "전화 번호 : ${telephonyManager.line1Number}\n"
// SIM 국가 코드
textView.append("SIM 국가 코드 : ${telephonyManager.simCountryIso}\n")
// 모바일 국가 코드 + 모바일 네트워크 코드
textView.append("모바일 국가 코드 + 모바일 네트워크 코드 : ${telephonyManager.simOperator}\n")
// 서비스 이름
textView.append("서비스 이름 : ${telephonyManager.simOperatorName}\n")
// SIM 상태 (통신 가능 여부, PIN LOCK 여부)
textView.append("SIM 상태 : ${telephonyManager.simState}\n")
// 음성 메일 번호
textView.append("음성 메일 번호 : ${telephonyManager.voiceMailNumber}")
}
전화 기능과 관련된 정보를 가져올 수 있다.
전화번호 : line1Number
SIM 국가 코드 : simCountryIso)
모바일 국가코드 + 모바일 네트워크 코드 : simOperator)
서비스 이름 : simOperatorName)
SIM 상태(통신 가능 여부, PIN LOCK 여부) : simState)
음성 메일 번호 : voiceMailNumber)
안드로이드 OS 및 시스템과 관련된 정보를 가져올 수 있다.
보드 이름 : Build.BOARD
소프트웨어를 커스터마이징한 제조사 : Build.BRAND
제조사 디자인명 : Build.DEVICE
사용자에게 표시되는 빌드 ID : Build.DISPLAY
빌드 고유 ID : Build.FINGERPRINT
ChangeList 번호 : Build.ID
제품/하드웨어 제조업체 : Build.MANUFACTURER
제품 모델명 : Build.MODEL
제품명 : Build.PRODUCT
빌드 구분 : Build.TAGS
빌드 타입 : Build.TYPE
안드로이드 버전 : Build.VERSION.RELEASE
// 보드 이름
textView.append("보드 이름 : ${Build.BOARD}\n")
// 소프트웨어를 커스터마이징 한 회사
textView.append("소프트웨어를 커스터마이징 한 회사 : ${Build.BRAND}\n")
// 제조사 디자인 명
textView.append("제조사 디자인 명 : ${Build.DEVICE}\n")
// 사용자에게 표시되는 빌드 ID
textView.append("사용자에게 표시되는 빌드 ID : ${Build.DISPLAY}\n")
// 빌드 고유 ID
textView.append("빌드 고유 ID : ${Build.FINGERPRINT}\n")
// ChangeList 번호
textView.append("ChangeList 번호 : ${Build.ID}\n")
// 제품/하드웨어 제조업체
textView.append("제품/하드웨어 제조업체 : ${Build.MANUFACTURER}\n")
// 제품 모델명
textView.append("제품 모델명 : ${Build.MODEL}\n")
// 제품명
textView.append("제품 명 : ${Build.PRODUCT}\n")
// 빌드 구분
textView.append("빌드 구분 : ${Build.TAGS}\n")
// 빌드 타입
textView.append("빌드 타입 : ${Build.TYPE}\n")
// 안드로이드 버전
textView.append("안드로이드 버전 : ${Build.VERSION.RELEASE}")
// 안드로이드 코드네임
textView.append("안드로이드 코드 네임 : ${Build.VERSION.CODENAME}")
// 안드로이드 API 레벨
textView.append("안드로에드 API 레벨 : ${Build.VERSION.SDK_INT}")
// 단말기 해상도 정보
// 해상도 정보를 가지고 있는 객체를 추출한다.
val windowManager = getSystemService(WINDOW_SERVICE) as WindowManager
// 안드로이드 버전으로 분기한다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
// 단말기의 가로 해상도를 가져온다.
val width = windowManager.currentWindowMetrics.bounds.width()
// 단말기의 세로 해상도를 가져온다.
val height = windowManager.currentWindowMetrics.bounds.height()
textView.append("가로 해상도 : ${width}\n")
textView.append("세로 해상도 : ${height}\n")
} else {
// 해상도 정보를 담을 객체
val point = Point()
// 해상도 정보를 담는다.
windowManager.defaultDisplay.getSize(point)
textView.append("가로 해상도 : ${point.x}\n")
textView.append("세로 해상도 : ${point.y}\n")
}