블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday


출처: http://all4museum.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%95%B8%EB%93%9C%ED%8F%B0-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0



기본정보, 맥주소, 번호 가져오기


1.android.os.Build 클래스에서 기본정보 받아오기

http://developer.android.com/reference/android/os/Build.html

먼저 Manifest 을 열어서 다음 퍼미션을 추가하여 폰의 정보를 읽을 수 있도록 합니다.

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

그러면 android.os 패키지의 Build 클래스를 통해서 구할 수 있습니다.
Build 클래스 안에 static 변수로 선언되어 있으므로 그 값을 직접 받아오면 됩니다.

SDK 2.1 에서는 아래의 정보를 제공합니다.

Build.BOARD
Build.BRAND
Build.CPU_ABI
Build.DEVICE
Build.DISPLAY
Build.FINGERPRINT
Build.HOST
Build.ID
Build.MANUFACTURER  -> 제조사
Build.MODEL               -> 모델명 
Build.PRODUCT
Build.TAGS
Build.TYPE
Build.USER

제게는 제조사와 모델명이 가장 중요한 정보였습니다.

Build.SERIAL 같은 정보는 SDK 2.3부터 지원한다고 하네요.




2. 맥주소 가져오기

맥주소는 와이파이 하드웨어 맥주소이므로 와이파이의 상태에 접근할 수 있는 퍼미션을 부여합니다.

먼저, Manifest 파일에 다음 퍼미션을 추가합니다.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

아래 코드로 값을 얻습니다.

WifiManager mng = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo info = mng.getConnectionInfo();
String mac = info.getMacAddress();





3. 폰번호 가져오기

폰의 정보를 읽어 올 수 있는 퍼미션을 부여합니다.

먼저, Manifest 파일에 다음 퍼미션을 추가합니다.
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

아래 코드로 값을 얻습니다.

TelephonyManager mng = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String num = mng.getLine1Number();



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



출처: http://batsu05.tistory.com/37






안드로이드 폰에서 Wi-Fi Mac 주소 가져오는 함수,
어떤 기계에서는 Wi-Fi 가 꺼져 있으면 못가져 온다고도 해서, 
Wi-Fi 가 활성화 되어있는지 체크하고 Mac 주소 가져옴.


  1. public String getCurrentMacAddress(){  
  2.     String macAddress="";  
  3.     boolean bIsWifiOff=false;  
  4.           
  5.     WifiManager wfManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);  
  6.     if(!wfManager.isWifiEnabled()){  
  7.         wfManager.setWifiEnabled(true);  
  8.         bIsWifiOff = true;  
  9.     }  
  10.           
  11.     WifiInfo wfInfo = wfManager.getConnectionInfo();  
  12.     macAddress = wfInfo.getMacAddress();  
  13.           
  14.     if(bIsWifiOff){  
  15.         wfManager.setWifiEnabled(false);  
  16.         bIsWifiOff = false;  
  17.     }  
  18.           
  19.     return macAddress;  
  20. }  




그리고 반드시 퍼미션을 지정해 줘야 함.

  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  3. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>  
  4. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
  5. <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>  


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



출처: http://blog.naver.com/PostView.nhn?blogId=noeul_&logNo=140135587214


m_telephonyManager    =  (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        wfmanager     = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
        
        WifiInfo info    = wfmanager.getConnectionInfo();

 

        Log.i(TAG, " MDN 번호 "+m_telephonyManager.getLine1Number());
        Log.i(TAG, " IMEI "+m_telephonyManager.getDeviceId());
        Log.i(TAG, " MAC 주소 "+info.getMacAddress());
        Log.i(TAG, " 국가코드 "+m_telephonyManager.getNetworkCountryIso());
        Log.i(TAG, " 망 사업자 코드 MCC+MNC "+m_telephonyManager.getNetworkOperator());
        Log.i(TAG, " 망 사업자명 "+m_telephonyManager.getNetworkOperatorName());
        Log.i(TAG, " 가입자 ID "+m_telephonyManager.getSubscriberId());
        Log.i(TAG, " SIM카드 상태 "+m_telephonyManager.getSimState());

 

 

-퍼미션 설정 관련

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

 



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://javaexpert.tistory.com/193


퍼미션 관련 : 

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

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

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


Mac 정보 및 전화번호 가져오기

public String getLocalPhoneNumber(){ //전화번호

     TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

     return manager.getLine1Number();

    }

public String getLocalIpAddress() {//맥 어드레스

        try {

            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {

                NetworkInterface intf = en.nextElement();

                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {

                    InetAddress inetAddress = enumIpAddr.nextElement();

                    if (!inetAddress.isLoopbackAddress()) {

                        return inetAddress.getHostAddress().toString();

                    }

                }

            }

        catch (SocketException ex) {

            ex.printStackTrace();

        }

        return null;

    }


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://blog.naver.com/PostView.nhn?blogId=ziippy&logNo=120138070384



안드로이드 디바이스의 IP 구하기  Android 


[출처] 안드로이드 디바이스의 IP 구하기|작성자 지피


존에 사용하던 IP 구하는 코드는, 이런 상황에서 3G IP 를 리턴해 준다. 그럼 대략 난감;;;

 

[기존 코드]

public String getLocalIpAddress()
 {
  try {
         for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
             NetworkInterface intf = en.nextElement();
             for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                 InetAddress inetAddress = enumIpAddr.nextElement();
                 if (!inetAddress.isLoopbackAddress()) {
                     return inetAddress.getHostAddress().toString();
                 }
             }
         }
     } catch (SocketException e) {
         Log.e(DEBUG_TAG, "getLocalIpAddress Exception:"+e.toString());
     }
     return null;
 }

 

그래서 WiFi IP 가 있으면 그걸 사용할 수 있게 조금 수정함

 

[수정 코드]

public String getLocalIpAddress()
 {
  final String IP_NONE = "N/A";
  final String WIFI_DEVICE_PREFIX = "eth";
  
  String LocalIP = IP_NONE;
  try {
         for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
             NetworkInterface intf = en.nextElement();           
             for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                 InetAddress inetAddress = enumIpAddr.nextElement();
                 if (!inetAddress.isLoopbackAddress()) {
                  if( LocalIP.equals(IP_NONE) )
                     LocalIP = inetAddress.getHostAddress().toString();
                  else if( intf.getName().startsWith(WIFI_DEVICE_PREFIX) )
                     LocalIP = inetAddress.getHostAddress().toString();
                 }
             }
         }
     } catch (SocketException e) {
         Log.e(DEBUG_TAG, "getLocalIpAddress Exception:"+e.toString());
     }
     return LocalIP;
 }

 

확인 결과 WiFi 장치에 대해 getName() 을 해 보니 "eth0" 을 얻을 수 있었음.

그러므로 "eth" 로 시작하는 장치가 있는 경우 해당 IP 를 LocalIP 라고 판단함.

 

갤럭시S, 디자이어 에서는 테스트가 잘 되었는데.. 글쎄 다른 단말에서도 잘 될런지는 ㅎㅎㅎ

 

여하튼, 이렇게 수정해서 사용하니

위와 같은 상황에서도 WiFi IP 를 가지고 통신이 잘 된다는 ㅋ

 




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



Android Device의 IP 주소 가져오기


안드로이드에서 사용자의 단말이 WiFi에 고정 IP로 접속 했을 경우,

가끔 IP주소를 가져와서 작업해야할 경우가 생긴다.

이럴 경우 다음의 소스를 사용하면 된다.












물론 코드에서 필요로 하는 것들은 import해야 한다. 





01.public String getLocalIpAddress() {
02.try {
03.for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
04.{
05.NetworkInterface intf = (NetworkInterface) en.nextElement();
06.for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
07.{
08.InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
09.if (!inetAddress.isLoopbackAddress())
10.{
11.return inetAddress.getHostAddress().toString();
12.}
13.}
14.}
15.} catch (SocketException exception)
16.{
17.Log.e("We got Exception here", exception.toString());
18.}
19.return null;
20.}




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://dark2pee.tistory.com/entry/Android-IP-Address-%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94-%EC%86%8C%EC%8A%A4-%EC%98%88%EC%A0%9C


[Android] IP Address 가져오는 소스 예제


package exercice1.identificateur.ex;
 
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
 
import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import exercice1.identificateur.R;
 
public class wifi1 extends ListActivity {
private static final String LOG_TAG = null;
public String getLocalIpAddress() {
    try {
        for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
      tv.setText(getLocalIpAddress());
      setContentView(tv);  
}
}

//조금 수정

public String getLocalIpAddress()
{
    try {
        for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = (NetworkInterface)en.nextElement();
            for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = (InetAddress)enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}



출처 : http://202psj.tistory.com/588

반응형

'Programming' 카테고리의 다른 글

[링크] 예제로 배우는 GO 프로그래밍  (0) 2018.05.21
[펌] [iOS] info.plist Key 목록과 사용.  (0) 2018.03.26
Breakpad Client Libraries  (0) 2015.02.26
Posted by blueasa
, |