Parking MyCar 안드로이드 어플은 주차정보를 관리해주는 어플이다.
관리 되는 주차정보는 주차 시간, 경과 시간, 출차 시간, 주차 위치, 주차 사진 켭쳐 등이 있다.


* 주요 기능
1. Parking Here! (Camera)
    카메라를 이용하여 사진 켭쳐 후 주차정보 저장 기능. (맵을 이용한 위치정보 포함)
    지하 주차장 등 위치정보 외 주위 이미지 정보가 필요한 경우
2. Parking Here! (Map)
    주위 이미지 정보 없이 Map 상의 위치정보만으로 주차정보 저장 기능.
3. Find MyCar
    저장 된 주차정보를 확인하는 기능.
    주차 정보는 리스트 형식으로 표현되며, 주차정보를 롱클릭하여 [출차], [삭제], [상세보기]의 추가 기능을 사용할 수 있다.

실내(지하) 주차장에서는 주차 블럭의 켭여 된 이미지와 위치 정보를 이용하여 주차 된 나의 차를 쉽게 찾을 수 있으며, 주차 경과 시간을 확인 할 수 있습니다.
GPS의 오차 범위로 인해 주차 된 위치를 사용자가 직접 선택할 수 있어 정확한 위치 정보로 확인이 가능합니다. 



* 화면 구성

Parking MyCar의 화면은 크게 5개의 메인 화면으로 구성되며, 각각의 서브 화면들을 가진다.
1. 메인 화면
    Parking MyCar 어플의 메인 화면으로 메인 기능을 제공하는 화면으로 이동 할 수 있는 화면
2. 카메라 프리뷰 화면
    주차정보로 사용할 사진 이미지를 켭쳐하기 위한 카메라 프리뷰 화면
3. 주차위치 확인 맵 화면
    주차위치를 지정하기 위한 맵화면으로 나의 현재 위치 또는 맵을 클릭하여 직접 위치를 지정할 수 있는 화면
4. 주차 정보 리스트 화면
    저장 된 주차정보의 간략한 정보를 리스트로 보여주는 화면
5. 주차 상세정보 화면
    특정 주차정보에 대해 주차위치를 확인하기 위한 맵화면과 상세한 주차정보 확인 할 수 있는 팝업 화면


* 상세 기능
1. 주차정보 저장히기
    - 주차정보를 저장은 위치정보는 기본이며, 이미지 정보는 옵션이다.
    - 이미지 정보 저장 옵션에 따라 메인에서의 메뉴가 달라지며 화면의 흐름도 달라진다.
      메인화면의 Parking Here! 메뉴가 주차정보 저장메뉴이며, 카메라 아이콘이 이미지 정보가 포함하며, 지도 아이콘은 이미지 정보를 포함하지 않는다.
1.1. 이미지 정보 저장
- 안드로이드 폰의 카메라의 프리뷰 화면이 보이게 되며, 중앙의 흰색박스안에 저장하려는 이미지를 위치시키면 된다.
- 주로 지하주차장의 블럭이미지를 넣으면 유용하다.
- 상단의 돋보기 아이콘은 프리뷰화면의 줌버튼이며, 클릭하면 줌을 설정할 수 있는 팝업뷰가 나타나게 된다.
   (단, 카메라 하드웨어 또는 제조사에 따라 지원하지 않음)
- AF/MF 아이콘은 이미지를 켭쳐할 때 오토포커스의 설정을 변경할 수 있게 된다. (AF : Auto-Focus)
- Capture 버튼은 중앙의 횐색박스 안에 투영되는 영상을 켭쳐하여 이미지로 저장하는 버튼이며, 클릭시 켭쳐된 이미지가 팝업화면으로 보이며 저장과 취소를 선택할 수 있다. 저장을 선택 시 최종 이미지 정보를 저장하며 위치를 선택 할 수 있는 Map 화면으로 넘어간다.
1.2. 위치정보 저장
- 주차 된 위치정보는 GPS와 네트웍에 의해 처리되며, 실내에서는 오차가 발생할 수 있다.
- 위치정보의 선택은 현재 위치와 사용자가 직접 위치를 선택하는 2가지 기능이 제공된다.
- 기본으로 현재 위치가 MAP에 표현되며, 현재 위치는 GPS 또는 Network에 따라 변경 될 수 있으며, 사용자의 움직임에 따라서도 변경 될 수 있다. (위치지정 버튼을 클릭하면 사용자가 위치를 지정할 수 있다.)
- 위치지정 버튼을 클릭 후 사용자 위치지정 모드로 변경되면 사용자가 MAP 상에서 위치를 클릭하여 선택이 가능하다. (내위치 버튼을 클릭하면 현재 위치 지정으로 변경된다.)
- 현재 위치는 사람모양의 마커로 표현되며, 사용자 지정 위치는 자동차모양의 마커로 표현된다.
- 위치저장 버튼을 클릭하여 최종적으로 주차정보를 저장하게 된다. (저장되는 정보로는 이미지(옵션), 위치, 주차시간)
3. 주차정보 리스트 확인
- 저장 된 간략한 주차정보를 리스트 화면으로 볼수 있으며, 저장 된 모든 주차정보가 표현된다.
- 10개의 주차정보씩 표현이 되며, 더 많은 정보는 리스틔 하단에 더보기 버튼을 클릭하여 추가로 로딩되며, 최근 주차정보 순이다.
- 리스트에 이미지 썸네일, 주차시간, 상태, 주소정보, 위치정보, 경과된 주차시간을 확인 할 수 있다.
- 주소정보는 저장 시 네트웍의 상태에 따라 표현되지 않을 수 있다.
- 특정 주차정보를 롱클릭하게 되면 서브메뉴 팝업이 나타난다.
- 출차처리 : 선택 된 주차정보가 출차되었음을 처리한다.
- 삭제 : 선택 된 주차정보를 삭제한다.
- 상세보기 : 선택 된 주차정보의 상세뷰(MAP)을 보여준다.
- 주차경과 시간은 1시간까지는 검은색, 2시간까지는 파란색, 3시간이상은 빨간색으로 표현된다.
- 주차 이미지가 저장되어 있으면 썸네일로 보여지며, 없다면 기본 맵이미지로 표현된다.
4. 주차정보 상세보기 (MAP)
- 주차정보의 상세뷰는 MAP과 상세정보 팝업 2부분으로 나눠져있다.
- MAP 화면에는 나의 현재위치와 주차 된 차의 위치가 표현된다.
- 사람 버튼을 클릭 시 MAP이 나의 위치가 중앙으로 오게 이동된다.
- 자동차 버튼을 클릭 시 MAP이 주차 된 자동차의 위치가 중앙으로 오게 이동된다.
- 주차 정보 보기 버튼을 클릭 시 주차 상세보기 팝업을 볼수 있다.
- 주차 상세보기에는 이미지정보, 주차시간, 상태, 주소정보, 위치정보, 경과시간, 출차시간, 나와 주차 된 차의 거리(직선거리)를 확인 할 수 있다.
- 경과 시간은 주차정보 리스트와 동일한 색깔로 표현이 된다.
- 사용자가 이동하게 되면 MAP의 나의 마커가 이동하게 되며, 주차 되 차로 쉽게 이동할 수 있으며, 주차거리도 변경된다.

* 오류 및 문의
Parking MyCar 에 대한 오류 내용이나 문의는 아래의 트위터나 이메일을 이용하시면 됩니다.
    트위터 : @ukzzang
    이메일 : ukzzang@gmail.com

향후 좀더 유용한 기능의 추가와 업데이트를 통해 계속해서 찾아뷥겠습니다. 감사합니다.

Posted by as.wind.914
Mobile Dev/Android2010. 8. 21. 00:14
* 화면이 자동으로 꺼지는 것을 막는다.
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

* 카메라 줌 설정하기
    "zoom", "taking-picture-zoom" 두가지 설정 방법이 있다. 하드웨어에 따라 달리 사용된다.
    기본적으로 "zoom"을 사용하면 되나, 갤럭시에서는 "taking-picture-zoom"을 사용해야 된다.
    왜 항상 갤럭시는 혼자 저모양인지 모르겠음. (여튼 개발자 최대의 적은 갤럭시인건 분명하다.)
   1. "zoom" parameter 이용
       Camera.Parameters parmeters = camera.getParameters();
       parmeters.set("zoom", String.valueOf(value));
       camera.setParameters(parmeters);
    2. "taking-picture-zoom" parameter 이용
       Camera.Parameters parmeters = camera.getParameters();
       parmeters.set("taking-picture-zoom", String.valueOf(value));
       camera.setParameters(parmeters);

* 카메라 쵀대줌 값 가져오기
    줌 설정과 마찬가지로 "max-zoom", "taking-picture-zoom-max" 두가지 방법이 있다.
    물론 갤럭시는 "taking-picture-zoom-max"을 사용한다. 젠장할~~
    String maxZoomStr = parameters.get("max-zoom");
        또는
    String takingPicMaxZoomStr = parameters.get("taking-picture-zoom-max");

* Intent를 이용한 Web Browser 띄우기
    String webUrl = http://www.google.co.kr;
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webUrl));
    intent.putExtra(Browser.EXTRA_APPLICATION_ID, AppConstants.APP_ID_TAG);
    context.startActivity(intent);
    
    Extra에 자신 어플리케이션의 ID를 넘기게 되면 동일한 ID에 대해서는 항상 동일한 창에 띄워준다.

* WiFi Mac Address 가져오기
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    String macAddress = wifiInfo.getMacAddress();

    ACCESS_WIFI_STATE 사용 권한을 줘야 한다.
Posted by as.wind.914
Mobile Dev/Android2010. 8. 14. 19:35
Android 어플에서 객체인식 및 특징점 검출, 카메라 핸들링, 이미지 처리 등 많은 부분에서 유용하게 쓰이는 OpenCV가 Android로 포팅이 가능한 android-opencv가 code.google.com에 올라와서 간단히 정리해 본다.
이 내용은 http://code.google.com/p/android-opencv/ 내용을 기반으로 정리한 것이다.

위 code.google.com의 페이지에 보듯이 opencv를 android에 포팅하기 위해서는 미리 준비해야 하는 것들이 있다.
일단 window 환경에서 포팅하는 것으로 정리한다.

1. android-opencv 포팅을 위한 사전 준비
    - android-sdk : 기본으로 준비해야 함. 
        www.android.com에서 다운받아서 설치하면 된다.
    - android-ndk : crystax ndk r4 이용
        code.google.com의 android-opencv는 Android의 기본 NDK로는 build가 되지 않는다.
        Down : http://www.crystax.net/android/ndk-r4.php
    - cygwin
        windows에서 가상 리눅스 환경을 만들어준다.
        Down : http://www.cygwin.com/
    - android-opencv source
        SVN을 이용하여 checkout 받는다. (http://android-opencv.googlecode.com/svn/trunk/)
        SVN에 접속하면 opencv, samples 모두 사용한다. 먼저 opencv를 빌드 한후에 samples를 빌드하여
        테스트한다.

2. cygwin 설치
    - 먼저 android-opencv를 빌드하기 위해 리눅스 환경을 만들기 위해 다운로드 후 설치한다.
    - 설치하는 절차는 간략히 설명한다. 부족하면 검색하면 좋은 자료가 많다.
    - [Choose A Download Site] 화면이 나올때 까지는 기본 설정 또는 경로만 변경하고 지나가면 된다.
    - [Choose A Download Site]도 적당한 사이트를 선택하고 Next (난 ftp://ftp.kaist.ac.kr을 선택했음.)
    - 다음 화면이 중요하다. 리눅스 환경에서 android-opencv를 빌드 시 필요한 패키지를 선택하여
      설치하는 부분이다.
       너무 걱정하지 말자. 모두 설치 후 필요한 패키지는 다시 설치파일을 실행하여 똑같이 진행해서 이 화면에서
       다시 선택하여 설치가 가능하다.
       설치 할 항목
            Devel : gcc-core, gcc-g++, make, swig
            Editor : vim    
    - 그 다음부터는 그냥 두면 설치가 된다.
    - 설치 완료 후 실행하게 되면 리눅스 환경의 콜솔 창이 하나 뜨고 최초 실행 시 window 로그인 계정으로
       /home/[user] 형식으로 폴더가 생성이된다. 기본 사용 쉘은 bash shell 이다.

3. crystax ndk r4 
    - 해당 사이트에서 다운로드 받아 적당한 곳에 압축을 풀면된다.
    - 압축을 푼 후 cygwin이 설치 된 /home/[user]/ 아래 복사를 한다. cygwin 환경에서 빌드를 진행하기 위함.
    - 저의 빌드 환경에서의 패스는 /home/ukzzang/android-ndk-r4-crystax 임.

4. android-opencv source
    - svn을 이용하여 checkout 받은 뒤 체크 받은 소스를 cygwin이 설치 된 /home/[user]/ 아래에
       android-opencv로 복사한다. 경로를 변경해도 무방하다.

이로써 android-opencv를 빌드하기 위한 사전 준비 작업은 끝났다.

5. android-opencv build
    5.1. cygwin 환경 설정
        - windows 환경에서 패스 설정
            [바탕화면 컴퓨터] -> [설정] -> [고급 시스템 설정] -> [환경변수]의 path 부분에
            C:\cygwin\home\ukzzang\android-ndk-r4-crystax;C:\cygwin\bin; 추가한다.
        - cygwin 실행 후 bash 환경 파일 수정 (.bashrc 파일 수정 후 적용)
            vi ~/.bashrc 실행 (사용자 home 경로에서 실행)
        - 아래 내용을 추가한다.
            export PATH=$PATH:/home/ukzzang/android-ndk-r4-crystax
            export ANDROID_NDK_ROOT=/home/ukzzang/android-ndk-r4-crystax
            source ~/.bashrc 환경 설정 정보 재적용
    5.2. android-opencv build
        - cd /home/ukzzang/android-opencv/opencv 로 이동
        - sh build.sh
        - 뭐 빌드는 아주 간단하죠 ... build 하는데 시간이 꽤 걸리는 편이다. 천천히 기다리자
        - 빌드가 완료되면 ....../opencv/android/libs/armeabi 아래에 libopencv.so 파일이 생성된다.

여기까지로 android-opencv 빌드가 끝났다 ... 그럼 다음올 svn에서 받은 samples의 CVCamera를 빌드하여
실행해서 테스트 해보겠다.

6. android-opencv test
    6.1. CVCamera Sample Build
        - 테스트는 samples 안에 있는 CVCamera Project를 이용하여 진행하겠다.
        - 먼저 CVCamera Project를 NDK로 빌드한다. android-opencv 빌드와 동일하다.
        - ......./samples/CVCamera로 경로 이동
        - sh build.sh 실행하면 빌드 된다.
           혹시 경로부분에서 오류가 발생하면 jni 폴더의 Android.mk 파일을 vi로 열어서 수정하고 다시 빌드.
        - 위 화면처럼 빌드가 완료되면 libs/armeabi 아래에 libcvcamera.so 파일이 생성되어 있다.
        - 프로젝트 빌드 끝 ... 이제 Eclipse에서 프로젝트를 생성하고 실행만 해보면 된다.
    6.2. Eclipse Project Create & Test
        - Eclipse에 Android Project를 생성하고 cygwin에서 빌드한 CVCamera를 Import 한다.
        - 빌드 한 android-opencv 밑에 가면 android로 빌드하면서 생성 된 폴더가 있는데 안의 jni 밑의 Java 
           파일들도 Import 한다. 그리고 당연히 libandroid-opencv.so 파일도 프로젝트의 libcvcamera.so가 있는
           위치에 복사한다.
        - 프로젝트를 폰이나 에뮬에서 테스트하면 된다.
        - 카메라 뷰가 보이며, 뷰에 보이는 영상이 메뉴에서 선택한 알고리즘에 따라 특징 점들이 추출되어 보이게 된다.

이걸로 정말 끝 ...
       
Posted by as.wind.914