개발자의 끄적끄적

[Android] 안드로이드_단말기(디바이스) 정보 가져오기(TelephonyManager ) [펌] 본문

개발/android & ios

[Android] 안드로이드_단말기(디바이스) 정보 가져오기(TelephonyManager ) [펌]

효벨 2020. 7. 6. 02:00
728x90
반응형

[Android] 안드로이드_단말기(디바이스) 정보 가져오기(TelephonyManager ) [펌]

 

 

안드로이드 고유정보외에

 

TelephonyManager를 이용한 정보를 가져오는 방법을 알아보자.

(출처 : https://jamesdreaming.tistory.com/37)

 

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

 

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

 

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

 

 

■ 휴대폰 정보 가져오기

 

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

 

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://mine-it-record.tistory.com/186

반응형
Comments