안드로이드 어플 43

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

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

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

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

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

이전 예제(드래그 섀도우 이미지 변경하기) 를 응용하여 동전 이미지를 드래그 해보는 예제를 만들어보자. 이번 예제는 다음과 같이 구성된다. (이미지 파일) 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를 사용하기위해..

안드로이드 - Content Provider (콘텐트 프로바이더)

1. URI 안드로이드의 보안 정책상 응용 프로그램이 만든 데이터는 기본적으로 혼자만 액세스 가능하다. 자신이 만든 데이터를 외부로 공개할 때는 Content Provider를 제공해야한다. 콘텐트 프로바이더는 응용 프로그램을 구성하는 컴포넌트 중 하나로서 데이터를 제공하는 역할을 한다. URI(Uniform Resource Identifier)는 웹상의 주소를 나타내는 URL보다 더 상위의 개념이다. 국제 표준에 URI를 작성하는 방식은 다음과 같이 명시되어 있다. content://authority/path/id content://는 이 문자열이 URI임을 나타내는 접두이며 무조건 붙여야 한다. authority는 정보 제공자의 명칭이되 중복되면 안 되므로 패키지명을 사용할 것을 권장한다. path는..

안드로이드 - 시스템 클립보드를 활용한 데이터 복사 붙여넣기

클립보드는 임의의 응용 프로그램끼리 데이터를 교환하는 가장 기본적인 방법이다. 이것은 드래그&드롭에 의한 데이터 교환을 위해 범용적인 데이터 포맷을 정의할 필요도 있는데 클립보드 포맷이 그 역할을 맡게 된다. 시스템 클립보드는 운영체제가 관리하는 임시적인 자료 저장소이다. 임의의 프로그램이 클립보드를 자유롭게 액세스 할 수 있으므로 프로그램 내부의 뷰끼리는 물론이고 응용 프로그램끼리도 약속된 방법으로 데이터를 교환할 수 있다. 시스템 클립보드는 다음 4가지 포맷을 지원한다. 1. 텍스트 : 가장 일반적인 교환 대상 2. URI : 복잡한 형태의 데이터는 CP가 제공하며 데이터의 위치를 가리키는 URI를 클립보드에 저장한다. 3. 인텐트 : 앱을 실행하는 명령과 관련 데이터를 클립도르를 통해 전달한다. 액..

안드로이드 - 압축 파일 사용하기

압축 파일 관리 기능은 자바에 의해 언어 차원에서 제공되므로 안드로이드도 별도의 추가 라이브러리 없이 압축 파일을 만들거나 해제할 수 있다. ZipFile 클래스는 파일 기반의 zip 압축 파일을 다루며 압축 파일 내의 임의 파일을 랜덤으로 액세스한다. 다음 두가지 생성자가 있으며 File 객체로부터 생성할 수도 있고 압축 파일의 경로를 주어 열 수도 있다. ZipFile(File file [, int mode]) ZipFile(String name) File 객체로 생성할 때 mode에 OPEN_DELETE를 지정하면 사용 후 자동으로 삭제되므로 임시적으로 압축 파일을 만들어 할용할 수 있다. Enumeration readzip.xml ReadZip.java package com.example.ch25..