4학년 마지막 학기(ㅠ_ㅜ)에 임베디드 응용SW를 수강하면서 기말 프로젝트를 수행하려 한다.

프로젝트는 개인과제이며(다행인듯-_- 팀플하면 나혼자 다할거같음..) 많은 사람들에게 도움과 행복을(뭔가 거창함) 가져다 줄 수 있는 모바일 앱을 개발하는 것이다. 많은 사람들이 의미 있고 효과적이고 이전에 없었던 도움을 받을 수 있고, 더 행복해 질 수 있다는 것을 구체적으로 증명해야 한다. 그리고 실제로 몇 명 정도가 도움을 받을 수 있는 지 계산해서 보여야 한다.

과제 수행방법 : 우리가 사용가능한 공공 정보의 오픈 API들을 모두 조사한다. 그리고 사람들에게 어떤 도움을 줄 수 있는가에 대해 고민해 본다.

제출물 및 평가 기준 :
최종 결과물(에뮬레이터에서 돌아가는)과 소스코드를 제출. 그리고 그러한 결과물을 만들게 된 이유와 정말로 많은 사람들에게 도움을 줄 수 있는 결과물인지 논리적으로 설명한 보고서가 함께 제출되어야 함. 보고서가 평가에 대단히 큰 영향을 끼침.

-사회적 약자를 배려하기 위한 결과물인 경우 상당한 가산점이 부여된다.

--- 생각해 본 것. ( 아이디어 소스에 여러 항목을 적용시켜볼것  ex_) 위치기반 + 연애 = 오빠믿지?
아이디어 소스 :
1. 원격조종 -> 컴퓨터로 안드로이드폰 어플 조종
2. 위치기반 탐색
3. 관성인식
4. 백그라운드 프로그램
5. 포그라운드 프로그램
6. 화면 밝기 조정

아이디어 분야 :
1.연애
2.편의점
3. 건강
4.사회적 약자( 장님, 몸이 불편한 사람, 색맹(색약), 청각장애, 말을 못하는사람...등등 )
5. 애완동물
6. 여행
7.나라별 특화 서비스(외국의 경우 날짜를 몇째 주 등으로 표시함
8. 기타(악기)
9. 식품위성업소정보 ( 서울안심먹을거리 인증업소, 모범음식점), 부적합식품정보
10. 분실물 정보 (버스, 지하철, 택시, 기차- 분실물 사진. 내용물, 보관장소등)
11. 지하철 정보 서울메트로 지하철 역별 운행시각
12. 문화정보(서울시내 박물관, 기념관, 공연장. 외국문화원 등 문화시설 위치 안내)
13. 화장실정보 (서울시 공공화장실 위치 정보)
14. 새주소
15. 수질정보(100여개의 정수시러에서 수집하는 수돗물 수질정보-탁도,PH,잔류염소,전기전도도,수온등)
16. 대기정보(서울시 34개소의 대기측정망에서 측정하는 일반대기, 도로변 대기오염도 정보(미세먼지, 오존,일산화탄소,이산화질소,아황산가스등)
17. 취업정보(서울 일자리 플러스 센터에서 수집하는 일반기업, 공공기관, 사회복지시설의 채용정보)


스마트폰에 탑재된 기능 :
1.블루투스
2.GPS
3.영상통화
4.멀티터치
5.와이파이
6.DMB
7.진동
8. 가계부
9.위치기반 서비스 + 해당 지점 리뷰확인가능


생각한 주제 :
1. 편의점 - 할인정보 포함 + 위치 표시해주기
-> 편의점이 평소 비싸다는 인식이 있는데, 증정행사나 할인행사등을 이용하면 오히려 마트보다 싸게 이용 할 수 있다. 본 모바일 어플리케이션을 개발하여 소비자에게 스마트한 소비를 할 수 있도록 도와준다. + 그리고 현재에서 가까운 편의점의 위치를 나타내준다.

2. 시각장애인을 위한 Smart UI + Indicator
-> 시각 장애인용 점자 터치스크린을 만든다.

3. Smart Security
-> 스마트폰에 프로그램을 심어 특정 사용자의 문자정보나 통화기록등을 캐내는 프로그램이 존재하는데, 이러한 악성 프로그램을 막기 위한 보안서비스를 제공한다.

'기타 > Android' 카테고리의 다른 글

Android fundamentals 2  (0) 2010.09.24
Android fundamentals 1  (0) 2010.09.24

Activity lifecycle
Activity 는 3가지 상태가 있다.
1. active or running
 : 스크린의 foreground로 돌아갈 때. focus가 유저의 행동에 달려있다.
2. paused
 : focus를 잃었는데 여전히 유저에게 보이는 경우. 다른 activity가 맨위에 있는데, 투명하거나 스크린을 모두 차지하지 않는 경우에 paused activity는 계속 보여야 한다. paused activity는 살아있는것이다. 하지만 극심한 메모리 상황이 오면 시스템에 의해 죽는다.
3. stopped
 : 다른 activity에 의해 불분명해 진 경우다. 이것은 여전히 상태와 정보가 남아있다. 하지만 더이상 유저에게 보이지 않는다. 윈도우에서 감추어지고, 종종 시스템에 의해 죽는다.

만약 activity가 paused 나 stopped에 있으면 시스템은 finish 질의를 하던지, 그냥 프로세스를 죽일 수 있다. 만약 유저에게 다시 보여지게 된다면 그것은 완전히 재시작 된다.

activitiy가 한 상태에서 다른 상태로 바뀔 때, 다음의 protect 메소드를 호출함으로써 알려진다.
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestarte()
void onResume()
void onPause()
void onStop()
void  onDestroy()
 이 모든 메소드들은 상태가 바뀔때 적절히 override할 수 있다. 모든 activity들은 객체가 instatiated 될 때 초기화 설정을 위해 반드시 onCreate()를 수행해야 한다. 그리고 많은 경우 데이터변화를 실행할때나, 유저와 상호작용을 멈출 때 onPause()를 사용할 수 있다.

이들을 합쳐서 전체적인 activity의 lifecycle을 정의할 수 있다. 그들이 실행되면서 3가지의 nested loop를 볼 수 있다.

* entire lifetime
 : activity의 entire lifetime은 first 호출인 onCreate()와 final호출인 onDestroy()사이에서 발생한다. activity는 onCreate()에서 모든 초기화 설정을 하고 남아있는 리소스에 대해서는 onDestroy()로 풀어준다. 예를들어 네트워크로부터 데이터를 다운로드하고 있는 thread는 onCretae()로 생성되고 멈출때는 onDestroy()를 사용한다.

*visible lifetime
 : visible lifetime 은 onStart()와 onStop()에서 발생한다. 이 시간동안 유저는 foreground와 유저와 상호작용하지 않는 경우더라도, 스크린에서 activity를 볼 수 있다. 이 두개의 메소드사이에서 우리는 유저에게 보여주어야만 하는 리소스를 유지시킬 수 있다. 예를들면 우리는 onstart()로 UI의 효과를 보기 위해 BroadcastReceiver를 등록할 수 있다. 그리고 onStop()으로 더이상 볼 필요가 없다면 중지시킬 수 있다.  onStart()와 onStop()메소드는 여러번 호출될 수 있다.

*foreground lifetime
 : onResume()과 onPause() 사이에서 일어난다. 이 시간동안 activity는 스크린에서 다른 activity보다 앞에서 보여지고 유저와 상호작용한다. activity는 즉시 resumed과 paused 상태로 갈 수 있다. 예를들면 onPause()는 장치가 sleep이나 새로운 activity가 시작될때 호출될수 있고, onResume()은 activity의 결과나 새로운 intent가 왔을 때 호출 된다. 따라서 이 두가지 메소드를 공정하게 사용해야 한다.

다음 다이어그램은 한 activity의 생성과 죽음에 대한 것이다.


 Method  Description  killable?  Next
 onCreate() activity 가 처음으로 생성될때  No  항상 다음은 onStart()
 onRestart() activity가 stopped된 후  No  항상 다음은 onStart()
 onStart() activity가 유저에게 보이기 전 No 유저에게 보이려면onResume() 
아니면(hidden), onStop()
 onResume()  유저와 상호작용하기 전에  No 항상 onPause() 
 onPause()  다른 activity가 resuming되려고 할때, 바뀌지 않는 데이터는 저장하지 않는다. CPU를 사용하는 것들은 중지시킨다. Yes  activity가 다시 front로 오면, onResume()  유저에게 보이지 않게 되면, onStop() 
 onStop()  유저에게 더이상 보이지 않을 때. activity가 destroy되거나 다른 activity가 resume되고 그것을 덮어씌웠을 때. Yes   유저와 상호작용하면 onRestart(),
죽으면 onDestroy()
 onDestroy() activity 가 destroy될 때. activity가 받게될 마지막 호출이다.   Yes   없음. 


'기타 > Android' 카테고리의 다른 글

안드로이드 프로젝트 - 개론  (0) 2010.10.05
Android fundamentals 1  (0) 2010.09.24

안드로이드 Dev Guide 말도안되는 번역 -*

안드로이드란?
안드로이드는 OS,미들웨어, 어플리케이션을 포함한 모바일 장치를 위한 소프트웨어 스택이다. 안드로이드 SDK는 안드로이드 플랫폼에서 자바언어를 사용하여 어플리케이션을 개발하기 위한 툴과  API들을 제공한다.

특징
* 어플리케이션 프레임워크 : 컴포넌트의 재사용과 대체가 가능하다
Dalvik 가상 머신 : 모바일에 최적화되어있다.
Integrated browser : WebKit 엔진에 기반하고 있다.
최적화된 그래픽 : 2D그래픽 라이브러리에 효과를 발위한다. (custom) 3D 그래픽은 OpenGL ES 1.0에 특화되어있다.
SQLite for structured data storage
공통의 오디오, 비디오, 이미지 포맷을 지원한다.(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
GSM Telephony (hardware dependent)
Bluetooth, Edge, 3G and WiFi
Camera, GPS, compass, and accelerometer (hardware dependent)
다양한 개발환경을 제공한다 : 에뮬레이터, 디버깅 툴, 메모리 프로파일링, 이클립스 IDE 플러그인 등.

안드로이드 아키텍쳐
 

어플리케이션
안드로이드는 핵심 어플리케이션을 탑재하고 있다. (이메일, SMS, 달력, 맵, 브라우저,..) 모든 어플리케이션은 자바로 프로그래밍 됬다.

어플리케이션 프레임워크
개발 플랫폼을 제공함으로써 안드로이드는 개발자에게 다양하고 혁신적인 어플리케이션을 개발할 능력을 제공한다. 개발자는 하드웨어나 정보에대한 접근, 백그라운드 서비스, 알람등등 무료로 이용할 수 있다. 
개발자는 핵심 어플리케이션에 대한 모든 접근 권한을 갖는다. 어플리케이션 아키텍쳐는 간단하게 컴포넌트의 재사용으로 구성된다. (후략)

라이브러리
안드로이드는 C/C++ 라이브러리를 포함한다.

안드로이드 런타임
안드로이드는 자바언어를 사용하는데 가장 기능적이고 핵심 라이브러리를 포함한다.
모든 안드로이드 어플리케이션은 그것 자신의 프로세스로 돌아간다. (Dalvik 가상머신의 인스턴스를 포함해서.) Dalvik 가상머신은 최적화된 최소한의 메모리 footprint의 Dalvik의 실행가능한 형식으로 실행된다. 가상머신은 레지스터 베이스고, 자바컴파일러에 의해 클래스들로 컴파일된다.  자바 컴파일러는 dx 툴에의해 .dex 로 변환된다.
Dalvik가상머신은 스레딩과 로우레벨 메모리 관리때문에 리눅스 커널에 의존적이다.

리눅스 커널
안드로이드는 리눅스2.6버전에 의존적이다.

어플리케이션 구성
안드로이드 어플리케이션은 자바에 의해 쓰여졌다. 컴파일된 자바코드는 aapt 툴에 의해 번들에서 안드로이드 패키지로, .apx suffix에 의해 아카이브 파일로 마크된다. 이 파일은 모바일에 설치되고 분배되개 위한 수단이다. 이것은 유저가 모바일에 다운로드한 파일이다. .apk파일의 모든 코드는 하나의 어플리케이션으로 간주된다.
* Activity
activity는 유저가 사용하고 있는 유저인터페이스의 이미지를 보여주는것이다. 예를 들어 activity는 유저가 선택할 수 있는 메뉴리스트를 보여주거나 그림을 보여준다. 텍스트메시지 어플리케이션은 아마도 보내려고하는 메시지를 보여주는 하나의 activity를 가지고 있을것이다. 그리고 두번째 activity는 메시지를 쓰는것이고 다른 activity는 오래된 메시지를 다시 보여주는 것이나 셋팅을 바꾸는 것일 것이다. 이러한 작업들이 합쳐져서 유저 인터페이스 폼을 이루고, 각각의 activity는 독립적이다. 각각은 Acitvity base 클래스의 서브클래스로 수행된다.
하나의 어플리케이션은 아마도 하나의 activity나 혹은 여러개로 구성된다. 전형적으로 하나의 activity는 유저가 어플리케이션을 실행했을때 제시된다. 하나의 activity에서 다른 acitivty로 이동하는 것은 현재의 activity 가 다음 것을 시작함으로써 실행된다.
각각의 acitivity는 기본 창이 그려진다. 전형적으로 윈도우는 스크린을 체운다. 하지만 스크린이 작거나 다른 창이 겹쳐진다면 윈도우는 스크린보다는 작아야 할 것이다. (후략)

서비스
서비스는 유저인터페이스이미지가 아니다. 하지만 백그라운드에서 무한한 시간동안 실행된다. 예를들어 서비스는 백그라운드뮤직과 비슷하다. (후략)

브로드캐스트 리시버스
브로드캐스트 리시버는 아무것도 하지 않는 컴포넌트다. 하지만 브로드캐스트 announcement를 받고 반응한다. (후략)

컨텐트 프로바이더
컨텐트 프로바이더는 특정 어플리케이션의 데이터셋을 다른 어플리케이션에서 사용가능하게 만들어 준다. 데이터는 SQLite에서 파일 시스템으로 저장될수 있다...(후략)

The manifest file
안드로이드가 얼플리케이션을 시작하기 전에 컴포넌트가 존재하는지 확인해야 한다. 따라서 어플리케이션은 안드로이드 패키지로 묶여진 manifest파일에 있는 컴포넌트들을 선언한다. 그리고 .apk 파일들은 어플리케이션 코드에 고정된다.
manifest파일은 xml파일구조이고, 모든 어플리케이션에서 항상 AndroidManifest.xml 이름을 갖는다. 그리고 manifest 는 어플리케이션이 링크해야되는것과 확인해야할것들에 대한 라이브러리에 대해 이름을 정한다.

하지만 기본적인 task들은 안드로이드에 알리기만 한다. 예를들어 다음은 activity가 선언되는 과정이다.
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
   
<application . . . >
       
<activity android:name="com.example.project.FreneticActivity"
                 
android:icon="@drawable/small_pic.png"
                 
android:label="@string/freneticLabel"
                  . . .  
>
       
</activity>
        . . .
   
</application>
</manifest>



'기타 > Android' 카테고리의 다른 글

안드로이드 프로젝트 - 개론  (0) 2010.10.05
Android fundamentals 2  (0) 2010.09.24

+ Recent posts