본문 바로가기

반응형

안드로이드

(93)
웹으로 요청하기 비연결성(Stateless)인 HTTP 프로토콜은 페이지 정보를 요청할 때마다 소켓을 새로 연결하고 응답을 받은 다음에는 소켓의 연결을 끊는 것이 일반적이다 그리고 그 소켓 연결 위에서 HTTP 프로토콜에 맞는 요청을 보내고 응답을 받아 처리한다 HTTP로 웹 서버에 접속하는 것도 소켓의 경우와 마찬가지로 표준 자바의 방식을 그대로 사용할 수 있다 자바에서 HTTP 클아이언트를 만드는 가장 간단한 방법은 URL 객체를 만들고 openConnection 메소드를 호출하여 HttpURLConnection 객체를 만드는 것이다 AndroidManifest.xml activity_main MainActivity package com.example.a56_http; import androidx.appcompat...
소켓 사용하기 소켓 - IP주소로 목적지 호스트를 찾아내고 포트로 통신 접속점을 찾아내는 소켓 연결은 TCP와 UDP 방식으로 나눌 수 있다 일반적인 프로그래밍에서는 대부분 TCP 연결을 사용한다 UDP 기반 소켓은 인터넷 전화에 많이 사용되는 SIP 프로토콜이나 멀티미티어 데이터 스트림을 처리하는 RTP 프로토콜은 기본적으로 UDP를 많이 사용한다 SIP 프로토콜은 Session Initiation Protocol이라고 하는데 IETF에서 정의한 시그널링 프로토콜이다 음성과 화상통화 같은 멀티미디어 세션을 제어하기 위해 사용된다 안드로이드는 표준 자바에서 사용하던 java.net 패키지의 클래스들을 그대로 사용할 수 있다 화면 구성을 위한 액티비티를 구성하고 나면 소켓 연결에 필요한 코드는 기존에 사용하던 자바 코드..
스레드로 애니메이션 만들기 여러 이미지를 연속해서 바꿔가며 애니메이션 효과를 만들고 싶을 때 스레드를 사용하는 경우가 많다 표준 자바에서 게임 등에 사용하는 대부분의 애니메이션 효과는 스레드를 사용하므로 기존의 앱 소스를 안드로이드용으로 포팅하려고 할 때는 이미 만들어두었던 코드와 같은 방식을 사용하는 것이 가장 좋다 activity_main MainActivity package com.example.a54_threadanim; import androidx.appcompat.app.AppCompatActivity; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.media.Image; import androi..
일정 시간 후에 실행하기 웹 서버와 같은 원격 서버에 접속한 후 웹 페이지를 요청할 때 응답이 늦어지거나 응답이 없으면 앱이 대기하고 있는 상황이 지속되는 문제가 생긴다 이런 경우에는 기본적으로 별도의 스레드를 만들어 처리하게 된다 하지만 버튼을 클릭해서 간단하게 접속 처리하는 경우에는 메인 스레드 내에서 지연 시간을 주는 것만으로도 UI의 멈춤 현상을 방지할 수 있다 단순히 Thread.sleep 메소드를 사용해서 잠깐 대기 상태로 있다가 다시 실행할 수 도 있지만, 핸들러로 지연 시간을 주었을 대 핸들러로 실행되는 코드는 메세지 큐를 통과하면서 순차적으로 실행되기 때문에 UI 객체들에 영향을 주지 않으면서 지연 시간을 두고 실행된다 activity_main MainActivity package com.example.a53_d..
스레드와 핸들러, Runnable, runOnUiThread 새로운 프로젝트를 만들면 자동으로 생성되는 메인 액티비티는 앱이 실행될 때 하나의 프로세스에서 처리된다 따라서 메인 액티비티 내에서 이벤트를 처리하거나 특정 메소드를 정의하여 기능을 구현할 대도 같은 프로세스 안에서 실행된다 같은 프로세스 안에서 일련의 기능이 순서대로 실행될 때 대부분은 큰 문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길 수 있다 이런 문제를 해결하려면 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 스레드 방식을 사용하게 된다 스레드는 동시 수행이 가능한 작업 단위이며, 현재 수행 중인 작업 이외의 기능을 동시에 처리할 때 새로운 스레드를 만들어 처리한다 이런 멀티 스레드 방식은 같은 프..
키패드 제어 AndroidManifest.xml 앱 실행 시 화면이 보이면서 키패드가 올라오지 않게 설정 android:windowSoftInputMode="stateHidden"> activity_main MainActivity package com.example.a51_keypad; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Overri..
시크바 activity_main MainActivity package com.example.a50_seekbar; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.WindowManager; import android.widget.SeekBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS..
웹뷰 AndroidManifest.xml 웹뷰 안에 웹사이트 표시 설정 android:usesCleartextTraffic="true"> MainActivity package com.example.a49_web; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import..

반응형