안드로이드 고유정보외에
TelephonyManager를 이용한 정보를 가져오는 방법을 알아보자.
- 아주 정리를 잘해놓은 블로그가 있기에 퍼온다. -
(출처 : https://jamesdreaming.tistory.com/37)
안드로이드 단말 정보는 정말 많이 필요 하게 됩니다.
예를 들어 휴대폰번호, 통신사, IMEI, 통화 상태, 데이터 상태 등등의 값들을 필요로 하는 경우가 있습니다.
그래서 꼭 알아 두어야 하는 것중 하나 이기도 합니다.
■ 휴대폰 정보 가져오기
단말정보를 읽어 오기 위해서는 AndroidManifest.xml 에 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();
}
}
출처 : https://jamesdreaming.tistory.com/37
댓글