[Android] 단말기 정보 파악하기

유민국·2023년 7월 14일
0

단말기 정보 파악하기

안드로이드 애플리케이션에서 단말기의 정보가 필요할 경우 정보를 가져다 사용할 수 있다.
안드로이드 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}")
}

TelephonyManager

전화 기능과 관련된 정보를 가져올 수 있다.
전화번호 : line1Number
SIM 국가 코드 : simCountryIso)
모바일 국가코드 + 모바일 네트워크 코드 : simOperator)
서비스 이름 : simOperatorName)
SIM 상태(통신 가능 여부, PIN LOCK 여부) : simState)
음성 메일 번호 : voiceMailNumber)

Build

안드로이드 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")
}
profile
안녕하세요 😊

0개의 댓글