본문 바로가기

반응형

IT

USB2Serial 제어시 USB Permission 획득에 관한 USB기기를 제어하는 경우 USB Permission 획득을 처리하는 것이 그다지 어려운 것은 아니다. 하지만 한번에 다량(2개 이상)의 멀티 USB Device를 제어하는 경우가 발생하면 이것이 생각보다 쉬운 일이 아니다. 원론적인 부분을 먼저 이야기하면 일단 USB Permission을 획득하기에 앞서 USB연결에 대한 "android.hardware.usb.action.USB_DEVICE_ATTACHED" 액션을 처리하는 것이 우선이다. 그리고 이 액션은 Receiver, Service 등에서 직접적으로 처리하면 USB Permission에 대한 권한을 시스템기본값으로 저장하여 동일한 기기가 연결될 때 다시 Permission을 획득하라는 창이 뜨는 것을 방지할 수 있는 뛰어난(?) 기능을 사용할 .. 더보기
Service stopService() 시 onDestroy() 가 작동하지 않거나 원하는 타이밍에 작동하지 않는 경우 하드웨어 제어 서비스를 프로그래밍하면서 잘 작동하던 Service의 onDestroy() 메소드가 stopService() 실행에 바로 작동하지 않는 경우가 있어서 이를 남겨본다. 생명주기상 안드로이드의 Service는 startService 또는 bindingService로 Service를 시작할 수 있는데 이중에 bindingService시 flag를 어떤 것을 사용하는지 어디서 startService가 발현하는지에 따라서 다양한 경우가 발생했다. 이중에서 내 프로그램에서 원하는대로 (stopService실행시 onDestroy를 바로타는 것) 처리할 수 있는 것은 bindingService에서 사용하는 flag를 변경하여 원하는 결과를 얻었다. // java code private void bind.. 더보기
젤리빈기반에서 DatePickerDialog 에서 취소버튼 이벤트 처리하는 방법 젤리빈으로 롬업데이트가 활발한 요즘, 개발자들은 이전보다 더 많은 것을 신경쓰고 이벤트처리에 신경을 써야 합니다. 가장 많은 골머리를 썩는 것중에 하나가 소프트버튼 또는 하드버튼으로 입력하는 취소처리, 다이얼로그의 OutSide를 클릭하여 취소하는 경우의 이벤트 처리가 그것일 겁니다. 그중에서 DatePickerDialog는 기본적으로 Positve버튼과 Cancel버튼이 기본적으로 달려있고, Positive버튼의 이벤트 처리는 다이얼로그 생성자에서 기본적으로 입력을 받습니다. DatePickerDialog dialog = new DatePickerDialog(getActivity(), dateOnDateSetListener, year, month, day); 요런식으로 말이죠..dateOnDateSet.. 더보기
ListView에서 동적 추가시 하단으로 자동이동 또는 강제이동 리스트뷰에서 동적으로 row가 증가함에 따라 자동으로 이동하게 해주는 옵션이 존재한다.layout 의 xml 에서 ListView의 속성중에 android:transcriptMode 의 속성을 적용하면 된다. 설정할 수 있는 값은 아래와 같다. ConstantValueDescriptiondisabled0Disables transcript mode. This is the default value.normal1The list will automatically scroll to the bottom when a data set change notification is received and only if the last item is already visible on screen.alwaysScroll2The .. 더보기
안드로이드에서 마켓 연동 종종 다른 프로그램이 설치되어있는지 확인하고 없는 경우 해당 프로그램을 다운로드 하기 위해서 마켓 프로그램을 실행하여 해당 프로그램을 바로 설치할 수 있도록 해야 하는 경우가 있습니다. 그럴 때 아래 코드를 사용하여 일반적인 엑티비티를 실행하듯 프로그래밍해주시면 됩니다. // java code // 안드로이드마켓에서 Apps 검색 Uri uri = Uri.parse("market://search?q=pname:프로그램_패키지_명"); // ex) 프로그램_패키지_명 = com.google.maps Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); // 안드로이드마켓의 App 상세 화면 Uri uri = Uri.parse.. 더보기
위젯의 보조기억장치 setTag() getTag() 안드로이드의 각 View를 확장한 위젯에는 setTag(Object obj)와 getTag() 라는 메소드를 제공합니다. Object를 담을 수 있는 공간을 제공하기 때문에 필요에 따라서는 class단위의 정보도 간단히 저장했다가 무엇을 저장했는지 정확하게 알 수 있다면 명시적인 캐스팅을 통해서 해당 정보를 다시 추출할 수 있습니다. 간단히 예제를 작성해 보았다.// java code package com.dante2k.helloworld; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.Button; public class MyTag extends Activity { B.. 더보기
eclipse 설정 workspace에 적용하는 방법 이런저런 방법에 .metadata복사하는 방법 등등해서 정말 다양한 방법이 존재하는데, 좀 더 쉽게 할 수 있는 방법이 있어서 소개합니다. eclipse의 최대 장점인 플러그인을 사용하였습니다. eclipse를 실행하고 메뉴바 -> Help -> eclipse marketplace... 를 눌러서 마켓플레이스를 오픈합니다. 검색어(workspace preference) 를 입력하고 엔터를 치면 검색되고, 다음과 같은 항목이 보일겁니다. 위 화면에 보이는 Workspace Preferences Transferrer 의 Install 버튼이 보이는데 그부분을 클릭합니다. 제 화면에는 이미 설치가 되어 있어서 Uninstall로 보입니다. 진리의 다음다음, Accept를 눌러서 설치를 완료하고, eclipse.. 더보기
[eclipse/android] Java compiler level does not match the version of the installed Java project facet 1. Java compiler level does not match the version of the installed Java project facet 2. Android requires compiler compliance level 5.0 or 6.0. Found '1.X' instead. Please use Android Tools > Fix Project Properties. 안드로이드 프로젝트를 시작하거나 중간에 수정하다가 위의 에러를 보게 되는 경우 안드로이드를 컴파일할때 사용하는 JDK의 버전이 문제가 되는 경우이다. 1. 의 경우 java compiler 버전을 안드로이드를 정상적으로 컴파일할 수 있는 1.5 또는 1.6버전으로 변경해주면 된다. Project 선택 -> 마우스 오른쪽버튼 .. 더보기

반응형