안드로이드 개발자의 창고
[51일차 Android] Device Information(단말기 정보 파악) 본문
출처 : 안드로이드 앱스쿨 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")
}
}
}
}
결과
'Computer > Android' 카테고리의 다른 글
[51일차 Android] Location (0) | 2023.07.20 |
---|---|
[52일차 Android] Sensor (0) | 2023.07.20 |
[51일차 Android] Screen Rotation(화면 회전 대응) (0) | 2023.07.19 |
[51일차 Android] Density(해상도 대응) (0) | 2023.07.19 |
[51일차 Android] Localization(지역화) (0) | 2023.07.18 |