프로그래밍 538

안드로이드 - 원격 인터페이스 서비스 사용하기

클라이언트에게 자신의 메소드를 제공하려면 자신의 메소드 목록을 인터페이스로 정의해야 한다. 원격에서 호출되는 메소드는 응용 프로그램의 경계를 넘어서 인수를 전달해야 하는 어려움이 있다. 각 응용 프로그램이 사용하는 메모리가 완전히 분리되어 있어 통산의 방법으로는 인수를 넘기기 어렵다. 소속된 패키지가 다름은 물론이고 응용 프로그램 수준보다 더 아래쪽의 저수준일 수도 있으며 심지어 자바가 아닌 다른 언어일 수도 있다. 따라서 전달할 수 있는 인수의 종류가 자바 기본 타입과 Parcelable 정도로 제한되며 그외에도 몇 가지 제약이 존재한다. 안드로이드는 원격 인터페이스를 정의하는 AIDL이라는 별도의 언어를 제공하며 AIDL 컴파일러가 인터페이스 정의를 구현하는 스텁까지 생성해준다. AIDL소스를 작성하..

안드로이드 - 데몬 백그라운드 서비스

서비스는 백그라운드에서 실행되며 사용자와 직접적인 상호작용을 하지 않는다. 전면에서 사용자를 대면하는 액티비티를 위해 연산이나 메소드 등의 서비스를 제공하는 것이 주된 임무이다. 클라이언트에서 어떤 식으로 호출하는 가에 따라 다음 두 가지 방법이 있다. - 백그라운드 데몬 : 배경에서 계속 실행되는 프로세스이다. 클라이언트가 가동시켜 놓기만 하면 사용자의 명령이 없어도 지속적으로 실행된다. - 원격 호출 인터페이스 : 클라이언트를 위해 특정한 기능을 제공하는 역할을 한다. 자신의 기능을 메소드로 노출시키며 클라이언트는 메소드를 호출함으로써 서비스를 이용한다. 사용 용도에 따라 가장 뚜렷한 차이가 발생하는 부분은 서비스의 생명 주기이다. (출처 : http://ccdev.tistory.com/25) 백그라..

JSP/Servlet - POST 방식 게시판 글쓰기 간단 예제

POST 방식으로 데이터를 넘기는 간단 예제이다. 다음과 같이 3개의 파일을 수정해야한다. BBSInput.html DOCTYPE html> Insert title here 글쓰기 이름: 제목: BBSPostServlet.java package com.exam.jsp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht..

JSP/Servlet - HTML과 Servlet을 이용한 간단한 덧셈기 만들기

AdderInput.html에서 값을 받고 AdderServlet.java에서 값을 처리한 후 합을 띄운다. AdderInput.html DOCTYPE html> Insert title here 첫번째 수 : 두번째 수 : AdderServlet.java package com.exam.jsp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import ja..

안드로이드 - 동전 이미지를 드래그 해보자

이전 예제(드래그 섀도우 이미지 변경하기) 를 응용하여 동전 이미지를 드래그 해보는 예제를 만들어보자. 이번 예제는 다음과 같이 구성된다. (이미지 파일) dragcoin.xml " DragCoin.java package com.example.ch27_dragcoin; import android.app.Activity; import android.content.ClipData; import android.graphics.Canvas; import android.graphics.Point; import android.os.Bundle; import android.view.DragEvent; import android.view.MotionEvent; import android.view.View; import..

안드로이드 - 드래그 섀도우 이미지 변경하기

드래그 섀도우는 드래그 중임을 나타내는 반투명한 이미지이다. 드래그를 시작하는 startDrag의 인수로 섀도우 이미지를 생성하는 View.DragShadowBuilder 객체가 전달되며 빌더에 의해 섀도우 이미지가 결정된다. 빌더는 다음 2개의 생성자가 있다. View.DragShadowBuilder(View view) View.DragShadowBuilder() View getView() view를 인수로 전달하면 뷰와 같은 모양의 섀도우를 생성하며 터치한 곳이 뷰의 중앙에 맞추어진다. 생성자로 전달받은 뷰는 언제든지 getView 메소드로 다시 참조할 수 있다. 드래그 대상 뷰의 크기만한 커스텀 섀도우를 그릴 때 뷰의 크기를 참조할 수 있고 기타 뷰의 여러 속성을 조사할 수 있다. 그러나 디폴트 섀..

안드로이드 - startDrag메소드를 이용한 드래그 & 드롭 구현하기

드래그 & 드롭은 모바일에서 환경에서 구현하기 위해 롱클릭이나 터치 다운 등의 이벤트에서 다음 메소드를 호출한다. boolean startDrag(ClipData data, View.DragShadowBuilder shadowBuilder, Object myLocalState, int flags) data는 드래그할 데이터이며 클립 데이터 객체를 사용한다. data 안에 교환 대상 데이터는 물론이고 데이터의 특성을 설명하는 메타 데이터도 포함되어 있다. 클립보드로 교환할 수 있는 데이터는 드래그 앤 드롭으로도 교환할 수 있다. shadowBuilder는 드래그 중에 보여줄 이미지인 섀도우를 작성하며 시스템은 이 객체의 콜백 메소드를 호출하여 섀도우 이미지를 얻는다. 빌더의 생성자로 뷰객체를 전단하면 뷰와..

안드로이드 - 클립보드를 통한 인텐트 복사

클립보드에 들어가는 데이터가 인텐트라는 것만 다를 뿐 텍스트 복사와 별 차이가 없다. 예제는 다음과 같이 구성된다. copyintent.xml CopyIntent.java package com.example.ch27_copyintent; import android.app.Activity; import android.content.ClipData; import android.content.ClipDescription; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import an..

안드로이드 - 클립보드를 이용해서 URI 복사하기

이미지나 구조체 같은 복잡한 데이터는 URI를 통해 간접적으로 복사한다. 붙여 넣는 쪽에서는 URI를 먼저 구하고 CP에게 데이터를 요청하여 실제 데이터를 구하는 방시긍ㄹ 쓴다. URI로 데이터를 전달하려면 주는 쪽에서는 이 URI에 반응할 수 있는 CP를 반드시 제공해야 한다. 다음 예제를 실행하려면 콘텐트프로바이더 예제를 먼저 실행 시켜서 insert버튼을 눌러둔다.. 또한 위의 콘텐트프로바이더 예제의 매니페스트 파일에서 다음과 같이 grantUriPermissions를 선언해야 한다. 안그러면 Permission 에러가 발생한다.( 여기 참고) 위와 같이 수정해야 할 것은 3군데이다. 다음은 AndroidManifest.xml 파일이다. 여기서 유의할 점은 ContentProvider를 사용하기위해..