제임스딘딘의
Tech & Life

개발자의 기록 노트/Android 37

[안드로이드] 펜딩인텐트 (Pending Intent)

안드로이드의 펜딩인텐트 (Pending Intent) 펜딩인텐트 (Pending Intent) 는 인텐트의 일종이다. 그러면 일반 인텐트와의 차이점은 무엇인지 알아보는 것부터 시작해보자. 컴포넌트에서 다른 컴포넌트에게 작업을 요청하는 인텐트를 사전에 생성시키고 만든다는 점과 "특정 시점"에 자신이 아닌 다른 컴포넌트들이 펜딩인텐트를 사용하여 다른 컴포넌트에게 작업을 요청시키는 데 사용된다는 점이 차이점이다. 수행시킬 작업 및 인텐트(실행의도)와 및 그것을 수행하는 주체를 지정하기 위한 정보를 명시 할 수 있는 기능의 클래스라고 보면 된다. 이해하기 쉽게 말하자면, 아래와 같이 하고 싶을때 사용할 수 있는 것이다. A한테 이 B인텐트를 C시점에 실행하라고 해. 지금은 실행하지 말고. 이 클래스의 인스턴스는..

[안드로이드] 안드로이드 Wi-Fi를 앱에서 소스 코드(API)로 끄고 켜는 방법

안드로이드 Wi-Fi를 코드(API)로 끄고 켜는 방법종종 앱을 개발하다보면, Wi-Fi를 앱에서 프로그램으로 제어 하고 싶을 때가 있다.안드로이드 장치의 Wi-Fi를 사용자의 터치 입력이 아니라, 자신이 개발중인 앱의 소스 코드 상에서, API호출을 하여 끄거나 켜는 방법을 알아보자. 우선, 아래와 같이 Wi-Fi 관련 권한들을 매니페스트 파일(AndroidManifest.xml)에 선언해야 한다. 이제 간단히 예제를 만들어 보겠다.Enable 및 Disable 기능을하는 2개의 버튼을 가진 간단한 샘플 앱을 만들 것이다. 우선, 간단히 아래와 같이 xml을 통해 Layout을 만든다. 파일이름은 activity_main.xml 으로 했다. 그리고 AndroidManifest.xml 은 아래와 같이 했..

[안드로이드] 안드로이드 Activity

안드로이드 액티비티란?Activity는 일종의 애플리케이션 구성 요소로서, 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기 등의 일을 하기 위해 상호작용할 수 있는 화면을 제공한다.액티비티마다 창이 하나씩 주어지며, 안드로이드 앱 개발자는 이곳에 UI(사용자 인터페이스)를 구현하게된다. 이 창은 일반적으로 화면을 가득 채우지만, 작은 창으로 만들어 다른 창 위에 띄울 수도 있다. 하나의 애플리케이션은 보통 여러 개의 액티비티가 느슨하게 서로 묶여 있는 형태로 구성된다. 통상 한 애플리케이션 내에서 하나의 액티비티가 "Main" 액티비티로 지정되며, 사용자가 이 애플리케이션을 처음 실행할 때 이 "Main"으로 지정된 액티비티가 사용자에게 최초로 보여지게 된다. 각각의 액티비티는 여러 가지..

[안드로이드] SDK manager 통한 업데이트후 ADT 실행 시 오류

지금은 많은 안드로이드 어플리케이션 개발자들이 Eclipse + ADT 조합에서 Android Studio로 넘어갔을 것이라 예상한다.하지만, 나는 아직도 Eclipse + ADT 조합을 이용한다. 그런데 어느순간, SDK manager를 통해 SDK를 업데이트 하고 나서부터 아래와 같이 ADT를 상위버전으로 업데이트 하라는 에러가 발생한다. 그냥 무시하고 써도 되겠거니.. 하고 Close하고 살펴봤는데, 이게 웬걸.아무것도 할수가 없었다.관련 패키지 로딩이 제대로 되지 않는 것으로 판단된다. 그래서 지시한 대로 [Help > Check for Updates]를 클릭하면 업데이트할 항목이 없다거나, 엉뚱한 것들만 표시된다. SubVersion 혹은 SVN 같은 것들. 한참 헤매다 보니, 아래와 같은 방법..

[안드로이드] 최신 Android 7.0 "누가" 출시 : 안드로이드 앱 개발자가 알아둬야 할 것들

최신 Android 7.0 "누가" 출시 : 안드로이드 앱 개발자가 알아둬야 할 것들 안드로이드 7.0, "누가" (Android Nougat) 버전 출시되면서 Google은 이 새로운 운영 체제에 몇 가지 필수 기능을 추가했다. 사실 안드로이드 7.0 누가(Android nougat)에서는 안드로이드 6.0 과 비교했을때, UI, UX, 그리고 Look and Feel을 크게 변경하지는 않았다.그러나 Google은 몇 가지 새로운 필수 기능을 추가했고, 운영 체제를 좀더 세련되게 다듬었다고 볼 수 있다. Nougat에 대한 Google의 설명은 다음과 같다. "Android Nougat은 보안적인 측면에서 사용자를 더욱 안전하게 유지하는 데 중요한 요소를 추가했다. chromebook의 업데이트 적용에..

[안드로이드] 동적으로 다음페이지를 로딩하는 ListView 구현

동적으로 다음페이지를 로딩하는 ListView 구현 아이폰의 수많은 UITableView를 활용하는 어플리케이션을 보면 참 퀄리티 높게 잘 만든다는 생각이 드는 것 중에 한가지가 바로, 자동으로 리스트의 가장 아래에 도달하면, 알아서 다음페이지를 로딩하는 기능이 아닐까 싶다. 안드로이드에서도 요즘은 많은 어플리케이션이 해당 기능을 구현하고 있다. 안드로이드에서는 리스트뷰와 데이터간에 Adapter라는 디자인패턴을 활용하고 있어 아이폰의 그것과는 같은 기능이라도 구현하는 방식이 다르다. 안드로이드에서는 좀 더 적극적으로 Adapter를 활용하여 이 기능을 구현해야 한다. 어찌보면 조잡하고 어찌보면 더 쉽게 구현할 수 있다. 길게 이야기할것 없이 예제 코드를 살펴 보겠다. public class Dynami..

[안드로이드] 안드로이드의 Process & Threads

안드로이드의 Process & Threads 안드로이드의 프로세스(Process)와 스레드(Threads)에 대해서 공부해 보았다.학교에서 배운 운영체제, 시스템 프로그래밍 등의 과목에서 배운 개념과 크게 다른 점은 없지만, 안드로이드의 프로세스와 스레드에는 분명 안드로이드 고유의 특성이 추가적으로 포함되어 있다.다음 링크의 자료를 참조 하였다. http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#ThreadSafe 시작하며 안드로이드 어플리케이션 컴포넌트(components)가 실행하려 할 때, 이미 시작된(running) 다른 컴포넌트가 없다면, 시스템은 단일한 하나의 스레드에서 실행되도록 하는 어플리케이션..

[안드로이드] 안드로이드 API GPS 상태체크

안드로이드 API GPS 상태체크 지도를 비롯하여, 안드로이드 기기의 위치정보를 이용한 서비스 개발을 할 때, 일반적으로 기기의 현재 위도(latitude), 경도(longitude) 값이 필요하다. 기기의 현재 위,경도 값을 알기 위해서는, 사용자가 위치정보 사용을 동의해야 한다.만약 동의하지 않은 상태에서 위치 획득 관련 API호출한다면, exception을 던지게 되어있다. 만약 아래와 같은 UX flow를 구현하려 한다면, 아래 코드를 참고하자. GPS 사용동의 여부를 체크 후 if 미동의 : 'GPS 사용 동의 설정 화면으로 이동 하겠는가?' 다이얼로그 출력. if 다이얼로그로 부터 '이동한다' 입력받을 경우 : GPS 설정 화면으로 이동. 아래는 그 기능의 예제코드이다. @Override pu..

[안드로이드] 자이로스코프 이야기. 가속도센서 vs 자이로센서 비교

자이로스코프 이야기. 가속도센서 vs 자이로센서 비교 오늘은 자이로스코프(Gyroscope)에 대해서 얘기를 해볼까 한다. 자이로스코프는 보통 '자이로센서' 라고 부르는데, 이 센서의 유무에 따라 스마트폰 가격이 크게 달라지는 것 같다. 아이폰은 자이로센서가 기본 탑재인 반면 안드로이드폰은 의무사항이 아니다. 하드웨어 제조사에서는 단가를 낮춘 저가형 라인업도 가지고 있는 경우가 종종 있는데, 이런 안드로이드 스마트폰들은 자이로센서를 제외하고 출시하기도 한다. 아무튼, 이 자이로센서가 무엇이고 어떤 원리로 동작하는지를 알아보자. 그리고, 이 자이로센서가 가속도센서와는 어떻게 다른지, 그 둘간의 차이점에 대해서 그 후에 알아보겠다. 자이로스코프(Gyroscope)운동하는 모든 물체는 각도를 갖고 있다. 예를..

[안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기

이미 생성해둔(Sqlite) DB파일을 앱에서 읽어들여 사용하기 약간 복잡한 기초 데이터를 위해 초기 실행시 Create Table 도 하고 insert도 할 수 있겠지만, 별도의 db 파일을 PC등에서 미리 만들고, 관리하며, 앱에서는 이 파일을 읽어들이기만 하여 (Load) 사용하고 싶다면 아래와 같은 방법을 쓰는 것도 한가지 해결책이 될 수 있다.db 파일을 assets에 넣는다.아래 함수를 적당한 위치에 넣는다. public static void initialize(Context ctx) { // check File folder = new File(ROOT_DIR + "databases"); folder.mkdirs(); File outfile = new File(ROOT_DIR + "databa..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (2)

2011/08/09 - [Software Dev Note/Android] - [안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)2011/08/11 - [Software Dev Note/Android] - [안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기 안드로이드에서 SQLite를 다뤄보자 (2)안드로이드 앱 개발을 할 때, 없어서는 안될 존재. SQLite의 사용법에 대해 알아보겠다. 오늘은 아주 데이터베이스를 뿌리뽑아보도록 하자.안드로이드는 모바일 환경에 알맞은 SQLite 데이터베이스를 채택하고 있다. 기본적으로 다른 데이터베이스와의 큰 차이는 없다. 물론, 완전히 같지는 않다.다른 점 이라면, 일반적은 데이터베이스는 테이블 생성 시 각 속성에 대한 타입을 지정한..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)

안드로이드에서 SQLite를 다뤄보자 (1) 안드로이드 플랫폼은 Database를 위해서 플랫폼 자체적으로 SQLite를 기본 탑재하고 있다.우선 SQLite의 특징을 살펴보자. SQLite는 다른 프로그램에 임베딩하기 좋으면서도 깔끔한 SQL 인터페이스를 제공한다.메모리도 적게 사용하면서 속도도 빠르다.실행파일과 소스 코드가 무료이고 공개되어 있기 때문에 많이 사용된다.위와 같은 이유로, 안드로이드는 SQLite를 기본탑재하여 내장하고 있으며, 그결과 모든 안드로이드 애플리케이션은 간단하게 SQLite 데이터베이스를 생성해 활용할수 있게 됐다.SQLite는 표준 SQL 인터페이스를 사용한다. -> SQLite는 SQL 문법에 맞는 명령을 통해 데이터를 가져오거나(SELECT) 데이터를 변경하고(INSE..

[안드로이드]Error generating final archive: Debug certificate expired on

Error generating final archive: Debug certificate expired on 종종 Android SDK를 사용하다 보면, 소스코드에는 전혀 Error가 없는데, Build하려고 하면 아래와 같은 Error로 인해 device나 emulator에서 실행시킬 수 없는 경우가 있다. 문제 상황"Error generating final archive: Debug certificate expired on" 라는 에러 메세지가 Console에 보임. 해결책해결방법은 간단하다. 우선, debug.keystore 라는 파일을 삭제하면 된다.보통 "사용자" 디렉토리에 '.android' 라는 폴더 아래에 있다.나의 경우는 아래와 같다. C:\Documents and Settings\Use..

[안드로이드] 안드로이드 SurfaceView 캡쳐 예제

안드로이드 SurfaceView 캡쳐 예제 다음과 같은 상황이라고 가정하자. 아이템의 사진을 찍는 앱이 있는데, 이 아이템들은 ActivityScreen의 특정한 고정 된 영역에서 볼 수 있어야 한다는 요구사항 있다.문제는 저장된 비트맵이 액티비티에 표시될 때 인데, 카메라로 보고 찍은 것과는 보여지는게 다르다. 줌을 땡겨서 사진을 찍을 때, 프리뷰 화면에서는 보여지지 않았던 영역까지 액티비티에 그려진다. 해결을 위한 주요 코드 줄은 다음과 같다. 이미지 캡쳐 (IMAGE CAPTURE) surfHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); captImageView = (ImageView)findViewById(R.id.CamImageView); b..

[Android] 죽지않는 서비스 만들기

안드로이드에서 죽지않는 서비스 만들기안드로이드는 시스템의 메모리 상황에 따라 각 Process별로 OOM Score (Out Of Memory Score)를 부여하고, 이 값을 기준으로 메모리가 부족해지면 OOM Score가 높은 Process부터 선택적으로 동작중인 서비스를 죽이기도 한다. 또한 나중에 다시 살리기도 한다. 만약 앱 개발을 하면서 죽지않고 항상 떠서 동작하는 서비스를 구현해야 하는 요구사항이 있다면, 이런 일이 발생하는 것에 당황할 수 있다. 이러한 상황에 부딪히면 자신이 개발중인 서비스를 죽지 않도록 만들고자 방법을 찾아볼 텐데, 이런 경우를 위한 방법이 있다. 바로 알람서비스를 이용하여 서비스가 죽으면 다시 살리는 방법이다. 많은 경우 이런 방식을 이용하는 것으로 보인다. 예제 소스..

[안드로이드] Push Notification 구현

[안드로이드] Push Notification 구현 안드로이드에서 Push notification을 구현하기 위한 방법으로 XMPP를 이용하는 방법과 MQTT를 이용하는 방법이 있다. 여기서는 MQTT를 이용하여 C2DM을 지원하지 않는 안드로이드 2.1이하 버전에서 PUSH notification을 지원하기 위한 방법에 대해 설명한다. 안드로이드 앱에서 Push notification을 지원하기 위한 방안은 3가지정도의 방안이 있다. 폴링이게 진정 push일까?? 어쨌든 단말에서 주기적으로 서버에 가져갈 메세지가 있는지 확인하여 push event를 수신할 수 있다. 장점 : 구현이 쉽고 비용도 안든다. 단정 : 실시간이 아니지 않은가... 게다가 이는 배터리소모까지 발생시킨다.. 끔찍하다. 이에 대한..

[안드로이드] 커스텀 프로그레스바

안드로이드 기본 프로그레스바를 사용하다보면 느끼는 것이 정말 안이쁘다는 것이다. 그리고 어플리케이션 디자인에 따른 프로그레스바의 색을 지정한다면 더 좋은 디자인을 갖는 어플을 개발 할 수 있을 것이다. 안드로이드 어플을 개발하면서 나쁜 것은 디자인적인 요소이지만 좋은 것은 그 디자인적 요소를 어떻게든지 커스터마이징 할 수 있다는 것이 장점이다. 프로그레스바는 현재 어플이 어떠한 작업을 하고 있다는 것을 사용자에게 보여주는 요소로 시간이 걸리는 작업을 수행하거나 혹은 좀더 좋은 효과를 표현하는데 사용될 수 있다. 이러한 프로그레스바를 커스텀 하는 방법은 간단한다. 먼저 /res 폴더아래에 drawable이라는 폴더를 만들고 그 안에 커스텀한 프로그래스바의 이름을 정한 xml파일을 만든다. 그리고 그 xml..

[안드로이드] 안드로이드의 이미지 Canvas, Bitmap, Drawable 개요

안드로이드의 이미지 Canvas, Bitmap, Drawable 개요 안드로이드에서는 이미지를 다루기 위한 몇가지 클래스가 존재한다.Canvas, Bitmap, Drawable이 그것이다.각각의 이미지 관련 클래스들에 대해 전반적인 사항을 알아보고자 한다. Drawable, 앱의 resource 디렉토리에 저장되어 있는 이미지 다루기기본적으로 resource에 저장되어 있는 이미지의 경우에는 "Drawable" type의 객체로써 해당 이미지를 다룰 수 있다."Drawable" type을 화면에 그리는 예제 코드는 아래와 같다. Drawable drawable = getResources().getDrawable(id); drawable.setBounds(0,0, drawable.getIntrinsicWi..

[안드로이드] 안드로이드 SDK 에뮬레이터에서 웹캠영상 받기

안드로이드 SDK 에뮬레이터에서 웹캠영상 받기 안드로이드 의 에뮬에서는 직접적인 카메라 지원은 하지 않는다. 그래서 PC의 웹캠을 달고 영상을 에뮬에 전달해서 보여주는 방식을 사용하는데, 이걸 하는 방법은 다음과 같다. 카메라 영상을 Broadcasting하는 서버일단은 android 개발 환경과 SDK는 다 설치 되었다는 가정하에 시작하자. 먼저 JMF가 필요한다.. 자바 에서 웹캠을 동작시켜 주는 프로그램이다. 현재는 거의 망해서 지원이 미비 하지만.. 어쨌건 우리는 이걸 사용해야 한다. JMF는 여기서 받는다. http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html 받아서 설치 하고 난다음에 환경변수에서 classpath가 ..

[안드로이드] Emulator: ERROR: bad config: virtual device directory lacks config.ini - 안드로이드 가상머신관련 오류 해결

안드로이드 Emulator: ERROR: bad config: virtual device directory lacks config.ini - 안드로이드 가상머신관련 오류 해결 emulator: ERROR: bad config: virtual device directory lacks config.iniemulator: could not find virtual device named 'test' 위와 같은 오류가 발생하는 이유는, 컴퓨터의 사용자 이름이 한글인 경우, 경로 인식을 제대로 하지 못해서 오류가 생긴다고 한다. 아래의 사진을 보면 커맨드라인의 폴더경로중 사용자이름 부분이 한글인 것을 확인할 수 있다. 바로 이러한 경우가 문제가 된다. 이런 문제가 생긴다고 가상머신을 사용하지 못한다면 더 이상 안드..

[안드로이드] ADT 8.0.0으로 업데이트 후의 draw9patch 에러

ADT 8.0.0으로 업데이트 후의 draw9patch 에러 Android SDK에는 draw9patch 라는 툴이 내장되어있다.이 툴은 auto resizing이 필요한 (버튼과같은) 이미지가 있을 때, 어느 영역을 resizing 할것인지를 지정하는 툴이라고 생각하면 이해가 쉽다.그런데 Android SDK버전을 진저브레드로 업데이트 이후, draw9patch 실행시 아래와같은 예외메세지를 뿌리며 프로그램이 죽는 증상이 발생할 수 있다. (스트레스!) 원인은 swing-worker.jar 파일이 ANDROID_SDK설치폴더/tools/lib 에 없기때문에 발생한다. 해결책은 해당파일을 해당위치에 넣어주면 된다. swing-worker.jar 파일은 아래에 링크해두었다. Marius Mathiesen라..

[안드로이드] Preferences 다루기 - 앱의 환경설정을 위한 Class

안드로이드 Preferences 다루기 앱을 개발하다보면 각각의 사용자별로 선호하는 값들을 저장하는 화면을 제공해야 할 때가 있다.게시물을 보여주는 앱을 예를들어 보자. 한화면에 보여지는 글의 목록을 어떤 사용자는 10개를 선호하는 반면, 어떤 사용자는 5개를 좋아한다면 앱개발자가 글 목록의 개수를 강제로 고정시킬 것이 아니라, 사용자 별로 설정을 할 수 있게 허용하는 것이다. 이것을 '환경설정' 혹은 'Preferences' 라고 하며, 안드로이드 플랫폼은 이런 것을 구현하기 편리하도록 기능을 제공한다.안드로이드 플랫폼은 Data를 저장하는 방법으로 환경설정(이하 Preferences), 파일, Local DB, 네트워크를 제공한다. 그 중 Preferences는 가장 간단하게 정보를 저장하는 방법(m..

[안드로이드] 서로다른 Activity 사이에 Parcelable사용하여 데이터/객체 전달 및 받는 방법

서로다른 액티비티(Activity) 사이에 Parcelable사용하여 데이터/객체 전달 및 받는 방법 Parcelable의 정석적인 사용방법은 아니지만, 객체의 포인터를 액티비티간 주고 받는 방식으로 보면 될 것 같다.물론 자바는 포인터가 없지만 여기서 사용한 방법은 개념상 포인터를 넘기는것과 같다고 봐도 무방할것 같다. 이미 잘 알려진것과 같이, 안드로이드에서는 서로다른 엑티비티 사이에서 객체를 주고 받기 위해서는 Intent를 이용한다.그런데 기본 데이터 형인 int, String, short, float... 등이 아니라 사용자 정의 Class의 instance를 넘겨야 하는 상황이라고 생각해보자.어떻게 해야할까?이때 사용되는 interface가 Parcelable 이다.기본 자료형 int, boo..

[안드로이드] 이미지와 텍스트가 같이 들어간 버튼 만들기

이미지와 텍스트가 같이 들어간 버튼 만들기안드로이드 SDK(1.5기중)에는 버튼을 처리하는 클래스가 Button과 ImageButton 크게 두가지 있다. ImageButton이 내부에 이미지를 가지고 있는 버튼이고, Button은 TextView를 상속하고 있기에 텍스트 버튼이라고 생각하기 쉬운데, 사실 그렇지 않다.일반적으로 버튼을 표시할때 간단하게 해당 버튼의 기능을 시각화 하여 나타내는 간단한 Icon을 함께 넣어주는 경우가 많을텐데, 그런 경우 ImageButton대신 Button을 활용해서 처리할 수 있다. 이미지의 위치는 텍스트의 상, 하, 좌, 우에 위치시킬 수 있으며, Xml에서는 각각 android:drawableTop, android:drawableBottom, android:draw..

[안드로이드] Bitmap 과 ByteArray 상호변환

Bitmap 과 ByteArray 상호변환 이 포스팅은 Bitmap 데이터 형을 ByteArray로 변환하거나, 혹은 그 역, ByteArray -> Bitmap으로 변환하는 방법을 예제코드와 함께 다룬다. 안드로이드 카메라와 이미지를 다루다보면, 종종 데이터 형(type)이 달라서 형변환을 해야 하는 상황이 발생한다. 그때 필요한 내용이다. 방법을 간단히 요약하자면 아래 두줄만 보면 된다. Bitmap -> ByteArray : ByteArrayOutputStream 인스턴스를 생성한 후, Bitmap의 compress 메서드를 통해 비트맵을 압축하여 stream에 담는다. ByteArray -> Bitmap : BitmapFactory의 decodeByteArray 메서드를 통해 byte Array를..

[안드로이드] 인터넷에서 이미지 비동기 다운로드

안드로이드 인터넷 이미지 비동기 다운로드보통, 인터넷에서 이미지를 다운로드 하는 코드를 아래와 같이 사용하는 경우가 종종 있었다.그러나 잘못된 사용방법이라고 한다. 잘못된 사용 예URL url = new URL(imageUrl); bitmap = BitmapFactory.decodeStream(url.openStream()); 이미지 주소로 URL 객체를 만든 후, BitmapFactory의 decodeStream( )의 인자로써 생성한 URL객체의 openStream( ) 메서드를 호출하고 있다.그러나, 아래와 같은 방법으로 사용하는 것이 올바른 사용 방법이라고 한다. 올바른 사용 예 HttpGet httpRequest = new HttpGet(URI.create(imageUrl) ); HttpClie..

[안드로이드] 증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm)

증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm) 노름(Norm)은 일종의 '벡터의 크기'를 일반화시킨 것이라고 생각하면 쉽다.선형대수학 및 함수해석학 등의 분야에서 쓰인다. 선형대수학 및 함수해석학에서는, 노름(영어: norm 놈[*])은 벡터 공간의 원소들에 대하여 일종의 ‘길이’ 또는 ‘크기’를 부여하는 함수 라고 정의한다.0 벡터의 노름은 0 이며, 그 외의 모든 벡터는 양의 실수 노름을 갖는다.한편, 반노름(半norm, 영어: seminorm 세미놈[*])이라 하는 개념이 있는데, 이는 영 벡터 이외의 벡터도 노름이 0 이 될 수 있도록 조건을 약화한 것이다. 노름(Norm)은 다음 조건을 만족시켜야 한다. Lp노름은 다음과 같이 정의된다. 한마디로 말하면, 각 성분들의 절..

[안드로이드] 안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점

안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점 안드로이드는 가속도 센서나 조도 센서와 같은 다양한 종류의 센서를 다루기 위한 API 를 제공하고 있다. 그 중 가장 일반적으로 사용되는 센서 두 가지는, 가속도 센서와 자기장 센서(나침반 센서) 이다. 어플리케이션과 디바이스는 이 두 가지 센서를 사용자 입력값으로 활용하여, 디바이스 스크린을 어느 방향으로 돌릴지 결정하는데 사용하곤 한다. 그러나, 최근 이와 관련된 새로운 문제가 발견되었다. 새로 출시된 디바이스들 중에는 (모토롤라의 CHARM 과 FLIPOUT 이라는 모델) 기본 화면 모드로 포트레이트(portrait) 모드 대신 랜드스케이프(landscape) 모드를 사용하고 있다. 따라서, 기본 화면이 세로로 길쭉하지 않고 가로로 넓..

[안드로이드] 카메라 해상도 바꾸기

안드로이드 카메라 해상도 바꾸기 카메라를 찍을때 촬영할 이미지의 해상도를 변경하는 방법을 보여주는 예제코드 입니다. 아래 코드는 APIDemo에 있던 Camera 소스를 약간 변경한 것입니다. Preview Class는 카메라에서 1600 * 1200 (2MP)과 가장 가까운 해상도를 찾아서, 그 해상도로 촬영을 해 주는 역할을 합니다. Activity에서 불러오는 방법은 APIDemo에 있는 Camera소스를 찾아 보시기 바랍니다. class Preview extends SurfaceView implements SurfaceHolder.Callback { private static final int IMAGE_WIDTH = 1600; // 촬영할 가로 픽셀 수 private static final in..

[안드로이드] http에 request요청시 - redirect 하는 방법

HTTP request요청시 redirect 하는 방법 및 예제코드안드로이드 앱을 만들다보면 http로 request를 보냈는데, 서버에서 url주소를 redirect해서 response를 보내주는 경우가 있다. 그럼 개발자가 의도한 동작이나 입력한 주소로는 요청이 안되게 된다. 이걸 해결하기위해서는 java에서 redirect된 주소로 다시 요청을 해줘야 한다. 상당히 귀찮다.예제를 보여주겠다. 이를 응용하거나, 바로 가져다 사용하면 귀찮은 작업을 덜 수 있다. private InputStream openConnectionCheckRedirects(URLConnection c) throws IOException { boolean redir; int redirects = 0; InputStream in ..

1 2