안드로이드에서 서버와의 통신작업 류 혹은 동시에 어떤 작업을 할 경우 스레드는 필수입니다. 전송이 끝나거나 작업이 끝나기를 동기적으로 대기하다 보면 사용자는 엄청 불편하겠죠. 그래서 스레드 작업을 많이 하게 되는데, RPC 콜이나 단순히 API를 사용하는 스레드라면 상관 없지만, 루프문에서 같은 작업을 종료하기 전까지 무한으로 하게 되는 경우에는 사용자가 스레드를 종료해 줘야 합니다. 그래서 안드로이드는 Java기반이므로 Java 스레드 정책에 따라 종료해 보려고 해도 종료가 되지 않는 문제가 가끔 생기는 것을 발견하였습니다. 참고로, 자바에서는 Thread를 interrupt() 메소드를 이용하여 종료시킵니다. 기존에는 stop(), suspend() 등을 사용하였으나 동기화에 있어 문제가 생길 수 있..
ItemizedOverlay를 extends 한 클래스를 이용하여 MapView에 marker를 띄우게 되면, 처음에 ItemizedOverlay를 생성할 때 설정해준 default 마커가 맵에 나타나는데, 마커별로 다른 그림을 넣고 싶다면 다음과 같이 addOverlays()를 변경해주면 됩니다. public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } public void addOverlay(OverlayItem overlay, Drawable drawable) { if(drawable!=null) overlay.setMarker(boundCenterBottom(drawable)); addOverlay(ove..
안드로이드를 포함한 모바일 단말기에는 휴대성으로 인해 해상도 제약이 심하므로 추가 명령을 위한 컴포넌트가 필수적입니다. 안드로이드도 여러 방안을 제시하는데, 그 중에 하나로 OptionsMenu, 즉 소위 메뉴라고 불리는 것이 있습니다. 에뮬레이터에서는 menu버튼을 통해 동작하며, 일반적인 모바일 단말기에서는 왼쪽 하단부의 버튼을 누를 시 등장합니다. 대부분의 안드로이드 뷰가 그렇듯이, 메뉴 또한 xml, java를 이용한 두 가지 방법 모두를 지원합니다만, xml이 보다 직관적이고 사용하기 편한 것은 분명합니다. (제가 java로 하는 방법을 모르기도 합니다 ㅋㅋ) 메뉴 사용을 위한 순서를 간추려 보자면 1) xml 파일 생성하기 2) xml파일을 메뉴로 등록하기 3) 각 아이템에 대한 이벤트 설정하..
액티비티간의 이동을 위해 주로 사용되는 Intent의 종류로는 두 가지가 있습니다. 명시적(Explicit) 인텐트와 암시적(Implicit) 인텐트 입니다. 명시적 인텐트는 흔히 알고 있는 인텐트이므로 설명은 생략합니다. 암시적 인텐트는 특정 동작을 지정할 경우 안드로이드가 그에 알맞는 동작을 수행합니다. 전화걸기도 이를 이용하게 됩니다. startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+전화번호))); ※ 주의 : 전화걸기 퍼미션을 매니페스트에서 추가해 주어야 합니다.(CALL_PHONE)
안드로이드의 SQLite를 이용하여 생성한 DB의 내용을 확인하는 방법은 여러가지가 존재하지만 여기서는 adb를 이용하여 확인해 보겠습니다. 1. adb 환경변수 등록 (Windows 7 기준) 컴퓨터-(우클릭)->속성->고급시스템 설정->(고급 탭)환경 변수 Path 편집을 누르고 위와 같이 C:\abc; C:\bcd; C:\cde; 이런 형식으로 등록되어 있습니다. 끝에 세미콜론(;)을 추가하고 android sdk가 설치된 폴더의 하위 폴더 tools의 Full Path를 등록해 줍니다. 저의 패쓰는 C:\Program Files\Java\android-sdk-windows\tools 입니다. (이 과정을 생략하고 직접 커맨드라인으로 폴더에 들어가서 다음 단계를 진행해도 됩니다) 2. adb she..
위 에러는 클래스를 인스턴스화(객체화) 시키지 않고 내부 클래스를 접근할 때 발생한다. 예를 들어, class Foo { class Bar { } } Bar bar = new Foo.Bar(); 위와 같이 사용하였을 경우 에러가 난다. 또 빈번하게 에러가 나는 경우가 있다. 비슷한 맥락이지만, 메소드를 static으로 선언해 주고 static이 아닌 내부 클래스를 접근할 경우동일한 에러가 발생된다. class Foo { class Bar { } static void Test() { new Bar() .... } } 이유는 동일하다. 내부 클래스는 외부 클래스 생성시에 생성되기 때문이다.
컨텐트 프로바이더는 여러 애플리케이션 간의 데이터를 공유할 수 있는 유일한 방법입니다. 자기 자신의 데이터를 공유하고자 한다면 자기 자신의 컨텐트 프로바이더를 만들거나, 기존의 컨텐트 프로바이더에 데이터를 추가할 수 있습니다.. 컨텐트 프로바이더 사용하기 컨텐트 리졸버를 이용합니다. 모든 컨텐트 프로바이더에 해당되는 공통의 인터페이스 입니다. 컨텐트 프로바이더에 접근하기 위해서는 URI가 필요합니다. ContactsContract.Contacts.CONTENT_URI와 같은 식으로 상수로 제공하게 됩니다. 데이터를 가져오기 위해서는 ContentResolver.query() 또는 Activity.managedQuery()를 이용하는데, 여기서는 전자를 이용하겠습니다. query()의 매개변수를 이용하여 ..
위치정보로 날씨 정보를 가져오기 위해서는 우선 GeoPoint로 지역정보를 가져와야합니다. 이를 위해서는 Geocoder를 이용합니다. 지역->GeoPoint 를 지오코딩(Geocoding)이라고 하고, GeoPoint->지역 을 역 지오코딩(Reverse geocoding)이라고 합니다. 여기서는 역 지오코딩을 이용합니다. Geocoder의 getFromLocation()을 이용하여 Address 객체를 받아올 수 있습니다. ※ 주의 : 아시다시피 GeoPoint의 위도와 경도 값은 마이크로 값이므로 int형 입니다. 하지만 getFromLocation에서 사용되는 위도와 경도는 실제 값으로 double형입니다. 그래서 10^6으로 나누어서 인자를 넣어줘야 합니다. Address 객체를 통해 지역 값을..
- Total
- Today
- Yesterday
- 리눅스
- 데이터 과학
- 자료구조
- 운영체제
- 개발
- 리버스엔지니어링
- 이산수학
- 대학원
- Machine Learning
- Discrete Mathematics
- 카타르
- operating systems
- 안드로이드
- statistical learning
- android
- Data Science
- Data Structure
- 자바
- 머신러닝
- 통계학습
- 카타르 음주
- Algorithms
- 알고리즘
- Reverse Engineering
- 데이터 사이언스
- java
- 리버싱
- linux
- 기계학습
- reversing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |