개발자 블로그

안드로이드 스마트폰 이름 구하기 본문

프로그래밍/안드로이드

안드로이드 스마트폰 이름 구하기

로이드.Roid 2016. 5. 10. 22:10

안드로이드 앱을 개발할 때 프로그래밍을 통한 방법으로 스마트폰의 이름을 구할 수 있는 방법 몇가지를 소개한다. 최신기기와 구형기기에서 사용할 수 있는 방법에 차이가 있다. 사용자 기준에서 가장 쉽게 "내 스마트폰"을 구분할 수 있는 방법을 제공해주는게 목표인데, 구형기기에서는 한계가 있었다.

개발환경은 아래와 같다.

 - 스마트폰1 : 삼성 갤럭시s2, 젤리빈
 - 스마트폰2 : LG G2, 롤리팝


1. android.os.Build 정보를 이용하는 방법

개발자 입장에서는 제일 편한 방법이라고 할 수 있다. 퍼미션도 필요없고, 별도의 절차도 없다. 그냥 상수처럼 가져다 쓸 수 있다. 사용방법이 너무 간단해서 따로 설명할 것도 없다. 코드는 아래와 같다.

String tmpStr = "";

tmpStr += "ModelName : "   + Build.MODEL   + "\n";
tmpStr += "Device : "      + Build.DEVICE  + "\n";
tmpStr += "ProductName : " + Build.PRODUCT + "\n";
tmpStr += "ID : "          + Build.ID      + "\n";
tmpStr += "Tags : "        + Build.TAGS    + "\n";
tmpStr += "Type : "        + Build.TYPE    + "\n";
tmpStr += "User : "        + Build.USER    + "\n";
tmpStr += "Brand : "       + Build.BRAND;

Toast.makeText(this, tmpStr, Toast.LENGTH_LONG).show();

위 코드의 실행 결과는 아래와 같다.


왼쪽이 G2, 오른쪽이 갤럭시s2다. G2는 Device 항목을 참조하면 "G2"라는 정보를 얻을 수 있는데, 갤럭시s2는 공식 모델명인 "SHW-M250K"라는 문자열만 얻을 수 있다. 사용자 입장에서는 그다지 친절한 방법은 아닌 듯 하다.



2. [설정] > [휴대폰 정보]에서 설정한 [휴대폰 이름]을 이용하는 방법

[설정]에 들어가서 [휴대폰 정보]를 보면, [휴대폰 이름]이라는 항목이 있다. 기본값으로 "ㅇㅇㅇ의 G2"와 같은 식으로 입력이 되어있다. (여기서 ㅇㅇㅇ은 사용자의 이름) 사용자 입장에서 내 스마트폰임을 확인할 수 있는 가장 좋은 방법이라고 생각된다. 

코드는 아래와 같다.

BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
if(myDevice==null){
    // device does not support bluetooth
    return;
}

String deviceName = myDevice.getName();

Toast.makeText(this, deviceName, Toast.LENGTH_LONG).show();

위 코드를 실행하면 아래와 같은 문자열을 얻을 수 있다.


(내 실명으로 되어있어서 흐리게 처리를 했다.)

사용자 입자에서는 1번에서 설명한 방법보다 좋은 방법이지만, 아래와 같은 문제가 있다.

1. 일단 갤럭시s2 같은 구형폰은 [휴대폰 이름]을 설정할 수 없다.
2. 특정 퍼미션을 요구한다.

1번 부터 살펴보면, 갤럭시s2 같은 경우는 설정화면이 아래와 같다.

설정을 찾아봐도 [휴대폰 이름]을 설정할 수 있는 항목이 없다. 지금까지 사용해 폰 스마트폰이 갤럭시s2, G2 이렇게 두 개 밖에 없어서 다른 스마트폰(특히 요즘 나오는 갤럭시)은 [휴대폰 이름]을 설정할 수 있는 항목이 있는지 모르겠다. 

갤럭시s2에서 위 코드를 실행하면 아무런 정보도 얻을 수 없다.

(갤럭시s2에서 실행한 모습)


그리고 2번 문제.. 위 코드를 실행하기 위해서는 블루투스 장치를 사용하기 위한 퍼미션을 가지고 있어야 한다. 

<uses-permission android:name="android.permission.BLUETOOTH">

와이파이를 통해서 얻을 수 있는 방법도 있을것 같아서 구글링을 조금 해봤는데, 방법이 없는건지.. 내가 못 찾은건지 모르겠다. 휴대폰 이름을 얻자고 사용자에게 블루투스 사용권한을 요구하면,, 글쎄다.. 그냥 별 생각없이 설치하는 사람들은 '그런가보다...' 하고 넘어가겠지만 보안에 민감한 사용자들은 '왜 블루투스 권한을 요구하는거지?'라고 당연히 생각할 것 같은데,,



3. 사용자 프로필을 이용하는 방법

2번 방법을 갤럭시s2에서 사용할 수 없어서 다른 방법을 알아보다가 찾은건데, 역시나 특정 퍼미션을 요구하기 때문에 사용하기에는 문제가 있다. 프로필과 연락처 정보를 읽을 수 있도록 퍼미션을 줘야 한다. 또 [연락처]에서 "내 연락처"를 등록해놔야 쓸 수 있다. (내 연락처에 등록해 둔 정보를 읽는 방법이다.)

일단 아래와 같은 퍼미션을 줘야 한다.

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

소스 코드는 아래와 같다.

Cursor c = getApplication().getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
c.moveToFirst();
Toast.makeText(this, c.getString(c.getColumnIndex("display_name")), Toast.LENGTH_LONG).show();
c.close();

이렇게 하면 사용자가 [연락처]에 설정해 둔 [나]의 정보를 읽을 수 있다. 이렇게 해서 얻은 사용자의 이름에 위 1번에서 설명한 Build 정보를 조합하면 어느정도 친숙한 이름으로 사용자에게 제공할 수 있을 것 같다.

하지만,, 연락처에 접근할 수 있는 퍼미션을 요구한다는 점과 사용자가 "내 연락처"를 등록한 상태에서만 쓸 수 있다는 점에서.. 휴대폰의 이름을 구하기 위한 방법으로는 부적절해 보인다.

Comments