서버 클라이언트 통신 서버-클라이언트 통신시 소켓을 사용하게 되는데, Input/OutputStream으로는 int나 byte데이터만 전달할 수 있다. 이때 클래스등의 데이터를 전달하려면 ObjectInput/OutputStream을 사용하면 간단하게 데이터를 주고 받을 수 있다. 이전에 사용했던 안드로이드의 Parcel과 비슷하다(애초에 이쪽이 자바 쪽 기능을 가져온거겠지...) 먼저, 전달할 클래스를 직렬화 해야 하는데 Serializable 혹은 Externalizable을 implement 한다. 둘 다 같은 기능을 하고, Externalizable는 데이터를 어떻게 전달할 지 명시적으로 지정하고 싶을 때 사용한다. 이때엔 read/writeExternal 메소드를 오버라이드 해서 직접 read/..
프로그램 특성상 ListView의 사용이 많아서 여기에 정리한다. ListView를 사용하기 위해서는 다음의 재료가 필요하다. 내용이 들어있는 Item의 Array, ListView 객체, 이 둘을 연결해 줄 Adapter, item의 내용이 들어갈 item layout(xml파일) Item은 리스트의 각 줄마다 들어갈 내용으로, 이 Item을 모아놓은 Array가 필요하다.Array는 배열일 수도 있고, List, ArrayList일 수도 있다.(만드는 사람 마음) 내용의 추가삭제가 용의하게 ArrayList를 이용하는 것이 편하다. Adapter는 ArrayAdapter을 extend해서 만든다. 생성자 및 몇 가지 메소드를 override하면 되는데 getCount(), getItem(), getV..
Activity간 데이터를 전송하려면 intent를 생성해서 putExtra()메소드로 데이터를 넣어서 startActivity()메소드를 실행하면 되는데. primitive한 자료형만 가능하고 클래스와 같은 데이터는 전송할 수 없다. 따라서 클래스의 내용물을 하나하나 분해해서 putExtra()해야 하지만, Parcelable인터페이스를 사용하면 깔끔하게 전달할 수 있다. http://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html 먼저 전달하고자 하는 클래스에 Parcelable 인터페이스..
날씨 업데이트 과정 날씨정보는 Google및 기상청의 API를 사용해서 얻을 수 있는데, Google의 API는 현재위치좌표(위도,경도)를 사용해서도 날씨를 얻을 수 있다. 날씨 업데이트 과정 업데이트 요청 –> GPS로 현재 위치좌표 확인 –> google 날씨 api에 요청 –> stream reader로 xml파싱 -> 현재 날씨 부분만 추출 –> 날씨 그림 표시 날씨 업데이트는 상황에 따라 시간이 걸릴 수도 있기 때문에 백그라운드에서 작업하도록 한다. 보통 handler나 thread를 사용하는데, 이 경우 UI를 업데이트 하기 어렵고, 또 UI 업데이트가 제때 되지 않았다. 대신, 안드로이드에서 제공하는 AsyncTask를 사용한다. 1 private class UpdateWeatherJob e..
안드로이드의 미래에 대해 포스팅한지 얼마되지도 않았는데 구글의 모토렐라 인수뉴스가 나왔다. 레리 페이지가 내 포스팅을 보고 인수를 결정한 거란 생각은 완전 나 중심적인 사고이겠지만ㅋㅋㅋㅋ 구글에서는 "특허때문에 먹은거임. 님들 걱정ㄴㄴ" 라 하지만 내막은 아무도 모른다. 구글이 본격 제조업에 뛰어들면 MS는 좋아라하겠지. 하드웨어 업체들이 등을 돌릴테니까. 그렇지만 구글의 주 수입원이 광고인데 광고를 달 디바이스들이 없어지면 구글로서도 큰 타격이 아닐 수 없으므로 본격적으로 뛰어들진 않을 것 같다. 게다가 휴대폰의 아버지인 모토로라지만 요즘 성적이 괴랄해서 시너지효과가 일어날지도 의문이고. 사람들이 가장 생각하기 쉬운 시나리오는 모토렐라 인수-> 특허냠냠-> 님떨이함 제시 ㄱㄱ 요즘 대세가 HW+SW인것..
C2DM Push를 사용하면 서비스를 항상 돌리지 않아도 서버의 메시지를 받을 수 있다.(물론 결국 휴대폰에서 C2DM서비스가 실행중이여야 하지만, 특별한 경우가 아니면 지금도 돌고 있다.) 준비물 : 구글 계정, 3rd party 서버 메시지 전달 과정은 다음과 같다. 1. 단말기에서 3rd party 서버로 메시지 전송을 요청 2. 3rd party 서버에서 C2DM서버로 Push 전송 요청 3. C2DM 서버에서 단말기로 Push 메시지 전송 4. 받은 Push메시지를 단말기에서 처리 3번은 구글 서버에서 알아서 해주므로 1, 2, 4번을 직접 처리해야 한다. 1번은 직접 구현하면 되고, 2번과 4번은 정해진 프로세스에 따라서 구현하면 된다. 간단하게 C2DM메시지를 서버는 메시지 전송만, 어플은 ..
안드로이드 실행파일은 APK파일로, 컴파일 한 결과물을 ZIP으로 묶은 것이다. 파일 내부를 살펴보면 기본적으로 다음과 같은 구조로 되어 있다. o META-INF o res - AndroidManifest.xml - classes.dex - resources.arsc META-INF : 개발자의 키로 APK파일을 사인한 결과값들이 저장되어 있다. 파일마다 SHA1값이 저장되어 있기 때문에 파일 변조시 기기에 설치가 되지 않는다. res : 소스의 그림파일들과 바이너리화된 xml파일들이 저장되어 있다. AndroidManifest.xml : 바이너리화되어 있음 classes.dex : 컴파일된 소스 resources.arsc : 컴파일된 리소스 관련 파일 이 상태에선 파일을 수정할 수 없지만, apkto..
Facebook도 Twitter와 비슷한 방법으로 사용할 수 있다. 다만, Twitter의 경우 Twitter4J와 같은 관련 라이브러리를 사용할 수 있지만, Facebook은 관련 SDK를 오픈 소스로 공개하고 있다. SDK : https://github.com/facebook/facebook-android-sdk 이중 facebook 폴더의 내용을 프로젝트에 포함한 후 몇 몇 부분을 수정해야 한다. Facebook.java에서 아래 내용을 주석처리 1 authorize(...){ 2 ... 3 // Prefer single sign-on, where available. 4 // if (activityCode >= 0) { 5 // singleSignOnStarted = startSingleSignOn..
현재 프로그램을 트위터와 연동하기 위해, Twitter4J 라이브러리를 사용한다. Twitter4J는 100% 자바로 제작되어 있고 다양한 앱에서 이미 사용하고 있다. 트위터의 모든 기능을 구현하는 것이 아니라 트위터로 내보내기 기능 및 결과 확인만을 사용할 것이다. Twitter4J http://twitter4j.org/en/index.html 에서 Last stable version을 다운 받은 후 압축파일에서 lib폴더 아래의 twitter4j-core-* 와 twitter4j-media-support-* 파일을 프로젝트에 import한다.(후자는 이미지 업로드용) 트위터 개발자 사이트에 등록 https://dev.twitter.com 에 접속 한 후 오른쪽 상단의 Sign in을 눌러 로그인한다...
http://dmclab.hanyang.ac.kr 학교 블로그 서버가 불안정해서 이쪽에도 포스팅 해야겠다.
- Total
- Today
- Yesterday
- U123
- 잠금화면
- GutsyGibbon
- dex2jar
- Android
- 전화번호
- 아일랜드
- 레터스 투 줄리엣
- ubuntu
- 요리·레시피
- 5 sec rule
- 2월 29일
- 일상·생각
- 문학·책
- 더블린
- 락스크린
- apktool
- Gutsy
- lockscreen
- 5초 룰
- STOP_APP_SWITCH
- 프로포즈 데이
- setfsb
- 하이픈
- 안드로이드
- Ubuntu7.10
- Leap Year
- IT·컴퓨터
- NEXUS S
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |