Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[51일차 Android] Device Information(단말기 정보 파악) 본문

Computer/Android

[51일차 Android] Device Information(단말기 정보 파악)

Wise-99 2023. 7. 19. 20:21

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Device Information

  • 안드로이드 애플리케이션에서 단말기의 정보가 필요할 경우 정보를 가져다 사용할 수 있다.
  • 안드로이드 8.0 부터 단말기 일련번호, 유심 일련번호 등 단말기의 고유한 정보는 사용할 수 없다.

 

 

 

TelephonyManager

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

 

 

 

예제 코드

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    // 허가 허용 리스트
    val permissionList = arrayOf(
        Manifest.permission.READ_PHONE_STATE,
        Manifest.permission.READ_SMS,
        Manifest.permission.READ_PHONE_NUMBERS
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        requestPermissions(permissionList, 0)

        // TelephonyManager 추출
        val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager


        activityMainBinding.run {
            // 권한 허용 여부를 확인해 거부한 것이 하나라도 있으면 단말기 정보를 출력하지 않는다.
            val chk1 = ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.READ_SMS)
            val chk2 = ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.READ_PHONE_STATE)
            val chk3 = ActivityCompat.checkSelfPermission(this@MainActivity, Manifest.permission.READ_PHONE_NUMBERS)

            // 모든 권한 허용 시에만 동작
            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}\n")
            }
        
        ...
}

 

 

 

결과


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}\n")
            // 안드로이드 코드네임
            textView.append("안드로이드 코드 네임 : ${Build.VERSION.CODENAME}\n")
            // 안드로이드 API 레벨
            textView.append("안드로에드 API 레벨 : ${Build.VERSION.SDK_INT}\n")

            // 단말기 해상도 정보
            // 해상도 정보를 가지고 있는 객체를 추출한다.
            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")
            }
        }
    }
}

 

 

 

 

결과