본문 바로가기

Study/Programming

안드로이드 네트워크 - 꼬로미

홧팅2홧팅2


안녕하세요 꼬로미입니다


안드로이드 프로그래밍 네트워크에 대한 포스팅입니다






네트워킹 상태 조회

                                                                                                  



3G, 4G, 와이파이, 블루투스, 근거리통신(NFC) 등 모바일에서 이용할 수 있는 네트워크는 다양합니다

모바일에서 어떤 네트워크가 사용한지 프로그램에서 알고 싶을때

안드로이드에서 네트워크의 현재 상태에 대한 정보를 반환하는 ConnectivityManager 클래스를 사용합니다

네트워크 연결상태 감시, 변경시 다른 애플리케이션으로 방송을 하는 기능을 합니다


getNetworkInfo()를 호출해 확인이 가능

ConnectivityManager manager = 
        (ConnecitivityManager)getSystemService(context.CONNECTIVITY_SERVICE);

NetworkInfo info1 = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);


getNetworkInfo() 호출시 정의된 네트워크 상수들

  • TYPE_MOBILE : 디폴트 모바일 네트워크

  • TYPE_MOBILE_DUN : DUN 방식 모바일 네트워크

  • TYPE_MOBILE_HIPRI : High Priority 모바일 네트워크

  • TYPE_MOBILE_MMS : MMS 방식의 모바일 네트워크

  • TYPE_MOBILE_SUPL : SUPL 방식의 모바일 네트워크

  • TYPE_WIFI : 디폴트 WIFI 네트워크

  • TYPE_WIMAX : 디폴트 WIMAX네트워크

  • TYPE_BLUETOOTH : 블루투스 네트워크





웹페이지 읽기

                                                                                                  



애플리케이션에서 인터넷에서 텍스트나 이미지 같은 자원들을 다운로드할 필요가 있으며

웹서버가 사용하는 프로토콜은 HTTP이며 가장 기본적인 클래스로 java.net 패키지의 HttpURLConnection을 사용

네트워크에서 자료를 읽기 위해 Android Manefest 파일에 INTERNET 권한 설정





웹 브라우징

                                                                                                  



WebView 위젯을 사용해 웹페이지를 화면에 디스플레이하여 사용하는 방법으로

Webkit이라는 엔진을 사용해 HTML문서를 해석해 화면에 그려줌


WebView 사용방법

레이아웃에 <WebView>를 넣거나 onCreate()에서 액티비티 윈도우를 WebView로 설정으로 가능

WebView webview = new WebView(this);

setContentView(webview);


loadUrl() 호출

 webview.loadUrl("http://www.yahoo.co.kr");


loadData() 사용

String summary = "<html><body>You scored <b>192</b> points.</body></html>";

webview.loadData(summary, "text/html", "utf-8");


WebView 설정

  • WebChromeClient는 웹 브라우저 사용자 인터페이스에 영향을 주는 이벤트가 발생했을 경우 호출
    진행 상황 변경이나 자바 스크립트 경고가 발생한 경우에 호출

  • WebViewClient 는 화면을 그리는 데 영향을 주는 어떤 사건이 발생했을 경우 호출
    오류나 폼전송이 있는 경우 호출

  • WebSettings를 이용하여 설정 변경이 가능
    setJavaScriptEnabled()를 이용해 자바 스크립트 활성화 가능

  • addJavascriptInterface(Object, String)를 호출해 JavaScript-to-Java 인터페이스를 추가
    이것은 자바 객체를 WebView에 연결하는 것으로 이들 자바 객체는 웹 페이지의 자바 스크립트에서 제어가 가능


줌인 활성화

WebSettings.setBuiltInZoomControls(boolean)


캐시와 쿠키

브라우저가 올바르게 동작하기 위해 캐시와 쿠키가 있어야 하며 애플리케이션마다 각각 자신만의 캐시와 쿠키 저장소를 가지며 쿠키는 별도 스레드가 담당하며 쿠키 사용법은 레퍼런스의 CookieSyncManager을 참조


WebView 윈도우 관리

PC에서는 웹브라우저에서 HTML에 의해 새로운 윈도우 오픈이 가능하며 

WebChromeClient를 커스터마이즈하여 별도의 윈도우를 화면에 표시할 수도 있음




서버/클라이언트 통신

                                                                                                  



서버에서 ServerSocket 객체를 생성해 전용 포트 번호로 연결 요청을 기다리며

클라이언트는 서버의 호스트 이름과 포트번호를 파악해 그 포트번호로연결 요청메시지를 보내

특별한 문제가 없으면 서버에서 연결요청을 받아들이고, 새로운 포트번호를 가지는 새로운 소켓을 생성하여 통신


서버/클라이언트 통신 예제

서버(Java Project), 클라이언트(Android Project)

  • 서버에서 소켓을 생성하고 스트림을 소켓에 연결
    2차 스트림(PrintWriter, BufferedReader)을 사용하면 다양한 형태의 데이터를 읽을 수 있음(편리함, 확장성)

  • 클라이언트 애플리케이션의 onCreate()에서 서버 IP주소와 포트번호를 가지고 Socket()을 이용해 소켓 생성

  • 클라이언트는 서버와 연결시 Socket() 생성자는 전용소켓을 반환하며
    사용자 인터페이스 블록 문제 해결을 위해 스레드를 사용, 사용자 인터페이스에서 직접 접근 오류 발생 방지를 위해
    View클래스의 post() 메소드를 사용해 러너블객체를 UI 스레드로  전송







XML 처리

                                                                                                  



XML은 인터넷 상에서 간단한 데이터베이스의 역할은 한다고 생각하면 되며

XML 문서에서 필요한 데이터를 추출할 때 전문적으로 처리해주는 파서(parser)들을 이용합니다


안드로이드에서 제공 파서

DOM(Document Object Model) 파서

SAX(Simple API for XML) 파서

PullParser 등


XML DOM 파서 생성

javax.xml.parsers.DocumentBuilderFactory 클래스를 이용해 DOM XML 파서 생성

newDocumentBuilder() : XML 문서 빌더 객체 생성

parse(new InputSource(url.openStrea())) : XML 문서 파싱

getElementByTagName() : 필요한 태그가 있는 노드를 찾아 계층적인 노드 구조 반환






고고고고

읽어주셔서 감사드리며

뷰업 한번 부탁드려요~