http://jamesdreaming.tistory.com/37


안드로이드 단말 정보는 정말 많이 필요 하게 됩니다. 

예를 들어 휴대폰번호, 통신사, IMEI, 통화 상태, 데이터 상태 등등의 값들을 필요로 하는 경우가 있습니다. 

그래서 꼭 알아 두어야 하는 것중 하나 이기도 합니다. 


단말정보를 읽어 오기 위해서는 use-permission 추가를 해야 합니다. 

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


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

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


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

대표적으로 많이 사용하는 함수는 아래와 같습니다. 


  • IMEI 값 조회 

- tm.getDeviceId()


  • 전화번호 조회 

- tm.getLine1Number()


  • 망사업자명 조회

- tm.getSimOperatorName()


  • 음성통화 상태 조회

- tm.getCallState()


  • 데이터통신 상태 조회

- tm.getDataState()


이외 많은 함수들을 제공하고 있는데요 

상세한 정보를 원하시면 여기클릭 하여 안드로이드 개발자 사이트의 API 를 참조 하세요.



추가로 우리가 많이 필요한 값 중 하나가 안드로이드 단말의 유니크한 값입니다. 

많은 분들이 이 값 때문에 고민을 많이 하고 어려워 하고 있는데요. 

지금은 android_id 라는 값을 사용하고 있으며 이는 안드로이드의 Secure 클래스에서 제공하고 있습니다. 

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



■ 테스트 코드


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tutorial.james.androidtutorialtest">

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

</manifest>

MainActivity.java
package com.tutorial.james.androidtutorialtest;

import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

private static String TAG = "휴대폰 정보 가져오기";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 휴대폰 정보는 TelephonyManager 를 이용
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

Log.d(TAG, "음성통화 상태 : [ getCallState ] >>> "+tm.getCallState());
Log.d(TAG, "데이터통신 상태 : [ getDataState ] >>> "+tm.getDataState());
Log.d(TAG, "IMEI : [ getDeviceId ] >>>"+tm.getDeviceId());
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 카드 시리얼넘버 : [ getSimSerialNumber ] >>> "+tm.getSimSerialNumber());
Log.d(TAG, "SIM 카드 상태 : [ getSimState ] >>> "+tm.getSimState());
Log.d(TAG, "소프트웨어 버전넘버 : [ getDeviceSoftwareVersion ] >>> "+tm.getDeviceSoftwareVersion());

// 유니크한 단말 번호 >>> Android ID 사용
String android_id = Settings.Secure.getString(this.getContentResolver(),Settings.Secure.ANDROID_ID);
Log.d(TAG, "Android_ID >>> "+android_id);

}

@Override
protected void onResume() {
super.onResume();
}

}


■ 테스트 결과
음성통화 상태 : [ getCallState ] >>> 0
휴대폰 정보 가져오기: 데이터통화 상태 : [ getDataState ] >>> 0
휴대폰 정보 가져오기: IMEI : [ getDeviceId ] >>>996156449799883
휴대폰 정보 가져오기: 전화번호 : [ getLine1Number ] >>>
휴대폰 정보 가져오기: 통신사 ISO 국가코드 : [ getNetworkCountryIso ] >>> kr
휴대폰 정보 가져오기: 통신사 ISO 국가코드 : [ getSimCountryIso ] >>> kr
휴대폰 정보 가져오기: 망사업자 MCC+MNC : [ getNetworkOperator ] >>> 45008
휴대폰 정보 가져오기: 망사업자 MCC+MNC : [ getSimOperator ] >>> 45008
휴대폰 정보 가져오기: 망사업자명 : [ getNetworkOperatorName ] >>> olleh
휴대폰 정보 가져오기: 망사업자명 : [ getSimOperatorName ] >>> olleh
휴대폰 정보 가져오기: SIM 카드 시리얼넘버 : [ getSimSerialNumber ] >>> 63700730264853815421
휴대폰 정보 가져오기: SIM 카드 상태 : [ getSimState ] >>> 5
휴대폰 정보 가져오기: 소프트웨어 버전넘버 : [ getDeviceSoftwareVersion ] >>> 01
휴대폰 정보 가져오기: Android_ID >>> 7c982859265551f2

앞서 언급 했듯이 더 TelephonyManager 에는 많은 함수들이 있습니다. 
안드로이드 개발자 사이트의 API 를 참조 하시면 더 많은 유용한 함수들을 확인 하실 수 있습니다.