안드로이드에서 현재 시간을 알아내기 위해서는 여러 가지 방법이 있겠지만 그 중에서 한 가지를 소개하자면

 

java.util.Calendar 오브젝트를 이용하는 것이다. java.util에 포함되어있기 때문에 물론 안드로이드 뿐만 아니라 일반 자바 프로젝트에서도 이용 가능하다.

 

다음은 사용 예시이다.

 

public static String GetCurrentTime() {
	String time = "";
	Calendar cal = Calendar.getInstance();
	time = String.format("%04d-%02d-%02d-%02d-%02d-%02d-%03d",
			cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH),
			cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
		
	return time;
}

 

출력되는 포맷은 편의에 맞게 고치면 된다.

이 때 cal.get(Calendar.MONTH)는 "반환값+1"이 실제 달 수이므로 주의해야 한다.

0~12까지의 값을 반환하며 이는 각각 다음과 같이 매치된다.

  0 JANUARY
  1 FEBRUARY
  2 MARCH
  3 APRIL
  4 MAY
  5 JUNE
  6 JULY
  7 AUGUST
  8 SEPTEMBER
  9 OCTOBER
 10 NOVEMBER
 11 DECEMBER
 12 UNDECIMBER

 

시간(hour)을 얻어오는 cal.get(Calendar.HOUR_OF_DAY)는 24시 표현으로 시간 값으로 반환한다.

Posted by Kugi
,



개발 환경을 새롭게 세팅하면서 이클립스 및 안드로이드 개발 툴 등을 새로 설치하게 되었다.

 

이클립스 : eclipse-jee-juno-SR1

안드로이드 sdk : android-sdk_r21.1-windows

 

(jdk는 미리 설치하였으며 버전은 별로 중요하지 않다.)

 

이클립스 Help 메뉴의 "Install New Software..." 를 통해 ADT를 설치하였는데 (Android ADT - http://dl-ssl.google.com/android/eclipse)

 

 

(여기까지의 과정에 대해서는 생략)

 

설치가 끝났는데도 ADT 관련 툴바 아이콘 및 메뉴가 보이지 않았다.

 

설치가 제대로 되지 않은 것인가 의심이 되었으나 찾아보니 결국 문제는 아이콘 및 메뉴가 표시되어있지 않은 것 뿐이었다.

 

해결 방법은 다음과 같다.

 

(이하의 방법을 이미 적용한 후 알아차린 것인데, Open Perspective에서 "Java" perspective를 열면 그냥 문제 해결인 듯 하다.)

 

 

 

굳이 Java EE perspective에서 ADT를 이용하고자 한다면 다음의 단계를 따라하면 된다.

 

 

 

Posted by Kugi
,



안드로이드 프로그래밍을 위해 액티비티 레이아웃 xml 파일을 작업하다 보면

 

다음과 같은 Warning을 만날 수 있다.

 

[Accessibility] Missing contentDescription attribute on image

 

ImageView를 추가하고 이에 대한 contentDescrioption을 빼먹었다는 뜻이다.

 

무시해도 상관은 없지만 노란 경고 표시가 보기 싫다면

 

이 경고 메시지를 없애기 위한 3가지 방법이 있다.

 

첫번째 방법은 경고가 말하는대로 빠뜨린 contentDescription을 추가해주는 방법이다.

 

다음과 같이

 

android:contentDescription="@string/contentDescription"

 

를 추가해주면 경고가 사라진다.

 

 

 

contentDescription을 일일히 써주는게 싫다면 개별적인 경고를 무시하는 방법도 있다.

 

다음과 같이

 

tools:ignore="ContentDescription"

 

를 추가해주면 되는데, 이 때 tools를 사용하기 위해서는

 

xmlns:tools="http://schemas.android.com/tools"

 

가 추가되어있어야 하며 그렇지 않으면

 

error: Error parsing XML: unbound prefix

Attribute is missing the Android namespace prefix

 

이러한 에러가 생긴다.

 

이 방법을 적용하면 아래 이미지에서 볼 수 있듯이, ignore를 추가해준 부분에 대해서만 경고가 사라지게 된다.

 

 

 

마지막으로, 이상의 방법들이 모두 귀찮다면 아예 해당하는 모든 경고를 무시하는 방법이 있다.

 

이클립스의 메뉴중에서

 

[Windows -> Preferences -> Android -> Lint Error Checking]

 

을 찾아가서 contentDescription 항목을 warning 레벨에서 Ignore 레벨로 바꾸어주면 된다.

 

Posted by Kugi
,



이클립스(Juno)에서 openCV JNI sample 프로젝트를 돌려보려는데

 

"\ndk-build.cmd": Launching failed

 

와 같은 에러를 뱉어내었다.

 

ndk 플러그인을 설치하였기 때문에 이클립스에서 빌드가 되면 동시에 ndk build가 이루어져야 하는데 실패한 것이다.

 

해결 방법은 다음과 같이 ndk-build.cmd 파일이 있는 경로를 NDKROOT 환경변수에 추가해 주면 된다.

 

 

 

 

Posted by Kugi
,



한 프로그램에서 두 대의 연결된 USB 웹캠의 영상을 출력하려고 하였다.

 

그런데 두 프로그램 중 하나의 카메라 영상만이 출력되었다.

 

CvCapture* capture1 = cvCaptureFromCAM(0);
CvCapture* capture2 = cvCaptureFromCAM(1);

 

이런 식으로 하면 이론적으로는 두 대의 카메라 영상이 capture1, capture2에 잡혀야 하는데

 

도무지 의도하는대로 작동하지 않았다.

 

 

몇 시간을 고생하다가 해결책을 찾았는데

 

독립된 USB 버스(BUS)에 각각의 카메라를 연결하면 되는 것이었다.

 

즉, 나는 하나의 웹캠은 컴퓨터 본체의 앞면 USB 포트에 연결하고,

 

나머지 하나의 웹캠은 본체의 뒷면 USB 포트에 연결함으로써 이 문제를 해결하였다.

 

 

 

 

* 참고: cvGetCaptureDomain() 함수를 이용하면 연결된 카메라의 도메인 값을 얻어올 수 있다.

 

연결되지 않았거나 알 수 없는 장치라면 CV_CAP_ANY를 반환한다. 이외의 반환되는 값들은 다음과 같이 정의되어 있다. (highgui_c.h 참고)

 

값들은 cvCaptureFromCAM()를 호출할 때 매개변수로 넣을 수 있다.  ( index = camera_index + domain_offset (CV_CAP_*) )

 

참고한 OpenCV 버전은 2.4.3 이다.

 

 

    CV_CAP_ANY      =0,     // autodetect

    CV_CAP_MIL      =100,   // MIL proprietary drivers

    CV_CAP_VFW      =200,   // platform native
    CV_CAP_V4L      =200,
    CV_CAP_V4L2     =200,

    CV_CAP_FIREWARE =300,   // IEEE 1394 drivers
    CV_CAP_FIREWIRE =300,
    CV_CAP_IEEE1394 =300,
    CV_CAP_DC1394   =300,
    CV_CAP_CMU1394  =300,

    CV_CAP_STEREO   =400,   // TYZX proprietary drivers
    CV_CAP_TYZX     =400,
    CV_TYZX_LEFT    =400,
    CV_TYZX_RIGHT   =401,
    CV_TYZX_COLOR   =402,
    CV_TYZX_Z       =403,

    CV_CAP_QT       =500,   // QuickTime

    CV_CAP_UNICAP   =600,   // Unicap drivers

    CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)

    CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK

    CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)
    CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)

    CV_CAP_ANDROID  =1000,  // Android

    CV_CAP_XIAPI    =1100,   // XIMEA Camera API

    CV_CAP_AVFOUNDATION = 1200  // AVFoundation framework for iOS (OS X Lion will have the same API)

 

Posted by Kugi
,