// device 고유 정보값 가져오기
Log.d(tag, "BOARD: " + Build.BOARD);
Log.d(tag, "BRAND: " + Build.BRAND);
Log.d(tag, "CPU_ABI: " + Build.CPU_ABI);
Log.d(tag, "DEVICE: " + Build.DEVICE);
Log.d(tag, "DISPLAY: " + Build.DISPLAY);
Log.d(tag, "FINGERPRINT: " + Build.FINGERPRINT);
Log.d(tag, "HOST: " + Build.HOST);
Log.d(tag, "ID: " + Build.ID);
Log.d(tag, "MANUFACTURER: " + Build.MANUFACTURER);
Log.d(tag, "MODEL: " + Build.MODEL);
Log.d(tag, "PRODUCT: " + Build.PRODUCT);
Log.d(tag, "TAGS: " + Build.TAGS);
Log.d(tag, "TIME: " + Build.TIME);
Log.d(tag, "TYPE: " + Build.TYPE);
Log.d(tag, "USER: " + Build.USER);
// device 정보 가져오기
TelephonyManager telephony=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Log.d(tag, "getCallState : "+telephony.getCallState());
Log.d(tag, "getDataActivity : "+telephony.getDataActivity());
Log.d(tag, "getDataState : "+telephony.getDataState());
Log.d(tag, "getDeviceId : "+telephony.getDeviceId());
Log.d(tag, "getDeviceSoftwareVersion : "+telephony.getDeviceSoftwareVersion());
Log.d(tag, "getLine1Number : "+telephony.getLine1Number());
Log.d(tag, "getNetworkCountryIso : "+telephony.getNetworkCountryIso());
Log.d(tag, "getNetworkOperator : "+telephony.getNetworkOperator());
Log.d(tag, "getNetworkOperatorName : "+telephony.getNetworkOperatorName());
Log.d(tag, "getNetworkType : "+telephony.getNetworkType());
Log.d(tag, "getPhoneType : "+telephony.getPhoneType());
Log.d(tag, "getSimCountryIso : "+telephony.getSimCountryIso());
Log.d(tag, "getSubscriberId : "+telephony.getSubscriberId());
Log.d(tag, "getVoiceMailAlphaTag : "+telephony.getVoiceMailAlphaTag());
Log.d(tag, "getVoiceMailNumber : "+telephony.getVoiceMailNumber());
Log.d(tag, "isNetworkRoaming : "+telephony.isNetworkRoaming());
Log.d(tag, "hasIccCard : "+telephony.hasIccCard());
Log.d(tag, "hashCode : "+telephony.hashCode());
Log.d(tag, "toString : "+telephony.toString());
// device 계정 정보 가져오기
Account[] accounts = AccountManager.get(getApplicationContext()).getAccounts();
Account account = null;
for(int i=0;i<accounts.length;i++) {
account = accounts[i];
Log.d(tag, "Account - name: " + account.name + ", type :" + account.type);
if(account.type.equals("com.google")){ //이러면 구글 계정 구분 가능
}
(출처) http://kaludin.egloos.com/2649686
(참고)http://developer.android.com/reference/android/telephony/TelephonyManager.html
현재 단말기의 전화번호를 가져오고자 할때 사용한다.
((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number() |
그리고 아래는 단말기와 관련된 내용
|
그리고 아래는 좀 더 많은 내용.
분명 필요한 순간이 있을것이다. 잘 기억해두자.
=========================================================================================
android.telephony 패키지의 TelephonyManager클래스에서 담당한다.
단말기의 모뎀상태에 대한 정보를 얻기 위해서는 READ_PHONE_STATE권한이 필요하다.AndroidManifest.xml파일에 아래 내용을 추가한다. <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission>
◆ 단말기의 모뎀상태 조회TelephonyManager 객체를 얻기 위해서는 Context 객체에서 제공하는 getSystemService() 메서드를 이용한다. TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
음성통화 상태 조회 CALL_STATE_IDLE/CALL_STATE_OFFHOOK/CALL_STATE_RINGING 등의 값을 반환 Log.d("PHONE", "getCallState :" + tm.getCallState());데이터통신 상태 조회 DATA_DISCONNECTED/DATA_CONNECTING/DATA_CONNECTED/DATA_SUSPENDED 등의 값을 반환 Log.d("PHONE", "getDataState :" + tm.getDataState());단말기 ID 조회 GSM방식의 IMEI 또는 CDMA방식의 MEID 값을 반환 Log.d("PHONE", "getDeviceId :" + tm.getDeviceId());SW버전 조회 GSM방식의 IMEI/SV와 같은 SW버전을 반환 Log.d("PHONE", "getDeviceSoftwareVersion :" + tm.getDeviceSoftwareVersion());전화번호 조회 GSM방식의 MSISDN과 같은 전화번호 반환 Log.d("PHONE", "getLine1Number :" + tm.getLine1Number());국가코드 조회 현재 등록된 망 사업자의 MCC(Mobile Country Code)에 대한 ISO 국가코드 반환 Log.d("PHONE", "getNETWORKCountryIso :" + tm.getNetworkCountryIso()); Log.d("PHONE", "getSimCountryIso :" + tm.getSimCountryIso());망 사업자코드 조회 현재 등록된 망 사업자의 MCC+MNC(Mobile Network Code) 반환 Log.d("PHONE", "getNetworkOperator :" + tm.getNetworkOperator()); Log.d("PHONE", "getSimOperator :" + tm.getSimOperator());망 사업자명 조회 현재 등록된 망 사업자명 반환 Log.d("PHONE", "getNetworkOperatorName :" + tm.getNetworkOperatorName()); Log.d("PHONE", "getSimOperatorName :" + tm.getSimOperatorName());망 시스템 방식 조회 현재 단말기에서 사용중인 망 시스템 방식을 반환 NETWORK_TYPE_UNKNOWN/ GSM방식 : NETWORK_TYPE_GPRS/NETWORK_TYPE_EDGE/NETWORK_TYPE_UMTS/ NETWORK_TYPE_HSDPA/NETWORK_TYPE_HSUPA/NETWORK_TYPE_HSPA CDMA방식 : NETWORK_TYPE_CDMA/NETWORK_TYPE_EVDO_0/NETWORK_TYPE_EVDO_A/NETWORK_TYPE_1xRTT Log.d("PHONE", "getNetworkType :" + tm.getNetworkType());단말기 종류 조회 단말기에서 지원하는 망의 종류를 반환 PHONE_TYPE_NONE/PHONE_TYPE_GSM/PHONE_TYPE_CDMA 등의 값을 반환 Log.d("PHONE", "getPhoneType :" + tm.getPhoneType());SIM카드 Serial Number 조회 Log.d("PHONE", "getSimSerialNumber :" + tm.getSimSerialNumber());SIM카드 상태 조회 SIM_STATE_UNKNOWN/SIM_STATE_ABSENT/SIM_STATE_PIN_REQUIRED/SIM_STATE_PUK_REQUIRED/ SIM_STATE_NETWORK_LOCKED/SIM_STATE_READY 등의 값을 반환 Log.d("PHONE", "getSimState :" + tm.getSimState());가입자 ID 조회 GSM방식의 IMSI와 같은 가입자 ID 반환 Log.d("PHONE", "getSubscriberId :" + tm.getSubscriberId());
◆ 조회결과getCallState :0(CALL_STATE_IDLE)getDataState :2(DATA_ACTIVITY_OUT)getDeviceId :000000000000000getDeviceSoftwareVersion :nullgetLine1Number :15555218135getNetworkCountryIso :usgetNetworkOperator :310260getNetworkOperatorName :AndroidgetNetworkType :3(NETWORK_TYPE_UMTS)getPhoneType :1(PHONE_TYPE_GSM)getSimCountryIso :usgetSimOperator :310260getSimOperatorName :AndroidgetSimSerialNumber :89014103211118510720getSimState :5(SIM_STATE_READY)getSubscriberId :310260000000000
실제상황에서는 이와같이 현재 단말기의 상태를 직접 조회하는것이 아니라 상태정보가 변경될 때 자동으로 인식해야하는 상황이 훨씬 많을것이다.이럴때는 TelephonyManager의 listen()를 이용하여 콜백메서드를 등록하면 가능하다. tm.listen(new PhoneStateListener(){ public void onCallStateChanged(int state, String incomingNumber){ if (state == TelephonyManager.CALL_STATE_RINGING){ Log.d("Telephony", "state = " + state + ", number = " + incomingNumber); }else{ Log.d("Telephony", "state = " + state); } } }, PhoneStateListener.LISTEN_CALL_STATE);
onCallStateChanged() 이외에도 아래와 같은 상태변화를 감지할 수 있다.- onCallForwardingIndicatorChanged() : 호전환(Call Forwarding) 상태 변화- onCellLocationChanged() : 단말기의 Cell위치 변화- onDataActivity() : Data 활성화 상태 변화- onDataConnectionStateChanged() : Data 연결상태 변화- onMessageWaitingIndicatorChanged() : 메시지 대기상태 변화- onServiceStateChanged() : 단말기의 서비스 상태 변화- onSignalStrengthsChanged() : 망의 신호강도 변화
◆ 전화번호 처리각 국가별로 전화번호의 형식이 다르다. 한국은 01x-xxxx-xxxx 이 일반적이고,북미는 xxx-xxx-xxxx가 된다.PhoneNumberUtils.formatNumber() 메서드를 사용하면 설정된 Locale에 맞게 형식화 된다. String formattedTelNumber = PhoneNumberUtils.formatNumber("01098761234"); Log.d("Telephony", "formattedTelNumber :" + formattedTelNumber);Locale을 English(United States)로 할경우 010-987-61234로 출력된다.한국어로 할 경우는 01098761234가 그대로 출력된다.formatNumber() 메서드의 구현내용을 살펴봐야 할듯 하다.
EditText에서 전화번호를 입력받을 경우에도 자동으로 형식화가 가능하다.EditText객체의 addTextChangedListener에 PhoneNumberFormattingTextWatcher()를 등록하기만 하면 된다. EditText tn = (EditText) findViewById(R.id.edtTelNumber); tn.addTextChangedListener(new PhoneNumberFormattingTextWatcher());그러나 역시 한국어로는 동작하지 않았다.
그리고 아래는 좀 더 많은 내용.
분명 필요한 순간이 있을것이다. 잘 기억해두자.
=========================================================================================
'Dev. 안드로이드 > 참고소스' 카테고리의 다른 글
[안드로이드 팁] Android 기기별 액정 해상도 알아내기 (0) | 2012.10.22 |
---|---|
안드로이드 환경설정(Preferences) 사용하기 (0) | 2012.07.26 |
안드로이드 스크린 화면 크기 구하기 (0) | 2012.05.20 |
안드로이드 TabHost, TabWidget 사용하기 (0) | 2012.04.19 |
WebView 사용 예제 (0) | 2012.04.18 |