1) 벤더나 버전에 제한없이 안드로이드폰에서 USB나 Bluetooth를 이용해서 Accessory device와 통신(custom protocol)할 수 있나요?
2) 1)에서 제약이 있다면 어떤식으로 존재하나요?
3) 안드로이드 폰에서 임의의 좌표에 실제 터치를 가하지 않고, 터치이벤트를 발생시킬 수 있나요? (실제 터치발생시 실제 호출되는 메소드를 호출할 수 있는지?)
제가 안드로이드는 젬병이라... 좀 도와주십시오 ^,.^;;;
댓글 11
-
Jason
2012.10.24 09:31
-
신형섭
2012.10.25 15:44
안드로이드 스터디때 뵙던분이네요 ^^ 1~2번은 저도 잘 모르겠고 3번은 adb 를이용하여 이벤트를 발생시킬수 있습니다.
대충사용방법은 adb shell sendevent 방식이고 인자에대해선 구글링해보시면 자세하게 나올겁니다 ^^
-
Jason
2012.10.25 18:24
안드로이드 스터디는 어찌되었나요? ^^
위의 방식을 일반 앱에서 사용할 수 있나요? 즉, 일반앱에서 임의 터치좌표를 잡아서 터치이벤트를 발생시킬 수 있는지요?
대충 구글링해보니 ADB(Android Debug Bridge)는 일반앱에서는 불가능할 거 같다는 생각이 드는데요?
;;; 원체 아는 내용이 없는 부분이라 ...
-
우상정
2012.10.26 03:11
안녕하세요 오래간만에 인사드리네요.
답변이 별로 없어서, 부족하지만 제가 말씀드리겠습니다.
1) 통신(custom protocol)이 어떤 방식인지 정확히 적어두시 않으셔서 잘 모르겠지만,
Bluetooth로 파일 전송과 같은 통신은 가능합니다.
2) 제약은 딱히 있는 것은 잘 모르겠습니다.
그냥 리눅스에서 하던대로 하니 잘 되었었습니다.3) adb를 이용해 전송하셔도 되고, device file에 직접 wirte하셔도 됩니다.
getevent를 이용해서 raw data가 어떻게 전달되는지 확인할 수 있으며,
이 정보를 그대로 touchscreen에 해당하는 /dev/input/event# 에 전송하면 됩니다.
관련 정보는 http://source.android.com/tech/input/getevent.html 를 보시면 됩니다.좀더 똑똑하게 해결하는 방법으로 구글에서 이러한 것을 다 만들어주었습니다.
예를 들어 어떤 앱을 제가 쭉 수행하고, 이러한 입력을 저장하여 script로 반복 실행할 수 있습니다.monkeyrunner란 프로그램인데, 한번 알아두면 유용하게 잘 쓰게 됩니다.
http://developer.android.com/tools/help/monkeyrunner_concepts.html
감사합니다.
-
Jason
2012.10.26 09:08
잘 지내시죠 ^^ . 스터디에 하도 많은 분들이 계셔서 얼굴과 이름이 매치가 잘 안되네요 ^^;;;;;;; 죄송 ;;
답변 정말정말 감사드립니다. ㅠㅠ
참고로, 1)에서 말한 custom protocol은 외부 악세서리 디바이스와 스마트폰앱 간의 통신을 위해서 임의로 만든 통신 프로토콜을 지칭한 것입니다. 악세서리에서 스마트폰앱을 제어할수도 있고, 반대로 할 수도 있구요 ^^
-
맥주
2012.10.26 09:08
안녕하세요.
질문 3 은 제가 아는 방법이 3가지가 있는데, 일반 평범한 앱의 형태로는 자기 자신의 어플에서만 이벤트 발생이 가능한 것으로 알고 있습니다. 나머지 방식은 제약이 따릅니다.
1. java 형태의 앱
Instrumentation.sendPointerSync(..) 함수가 있습니다. 루트 권한이 아닌 이상 자신외에 플랫폼으로 이벤트를 발생할 수 없습니다.
2. java native 서비스
위의 우상정님이 언급하신 monkey 프로그램이 이에 해당합니다.
IWindowManager.injectPointerEvent(..) 함수가 있습니다. 플랫폼으로 이벤트를 발생할 수있습니다.
WindowManager 는 안드로이드 java 서비스이기 때문에 java native 프로그램으로 개발해야 접근이 가능 합니다.'
이는 이클립스에서 개발용으로 제공되는 SDK는 이 인터페이스를 접근할수 없습니다. 플랫폼 SDK에서 컴파일 가능합니다.
플랫폼 SDK를 이클립스에서 import하는 내용은 인사이드 안드로이드에 조금 언급되어 있습니다. 제가 직접 해 보지 않아서 앱으로 개발이 가능한지 조금 모호합니다.
3. c native 서비스
이도 위에서 언급된 내용인데, 일반 리눅스의 input 디바이스에 이벤트를 직접 write 하는 것인데, 보통 노드가 /dev/input/eventXX 로 존재 합니다.
물리적인 터치 디바이스 좌표로 입력을 주어야 하기 때문에 각 타겟마다 틀립니다. 디버깅 용도는 괜찮지만, 일반적으로 적용하긴 힘들죠. 또한 앱에서는 루트 권한이 아니면 노드 접근권한이 없습니다.
사실 일찍 이 질문을 읽었지만, 앱으로는 뽀죡한 숄루션이 없는 것 같아서 답변을 못하고 있다가 그냥 정리 차원에서 댓글을 답니다. --; 건강하세요.
-
맥주
2012.10.26 09:28
서비스 행태(백그라운드, command line 실행) 로 프로그램을 추가 할 수 있으면, 2,3 이 가능 합니다. 그리고 2번이 안드로이드 표준을 따른다고 할 수 있지요. monkey 프로그램을 분석 해 보시면, 터치 이벤트 발생은 그리 복잡한 것이 아닙니다.
소스의 위치는 대충 이렇습니다. development/cmds/monkey/
-
Jason
2012.10.26 09:22
안녕하세요 이백님 ^^ 잘 지내시죠 ^^
일단은 제가 클라이언트 측에 된다안된다 여부를 알려주는 것이 우선이라 이런 답변 완전 사랑합니다 ^^
좀 더 구체적인 질문으로 바꿔보자면
결국은
외부 악세서리 디바이스에서 터치 좌표와 터치제스처 이벤트가 발생했다는 custom command를 BT나 USB등을 통해서 전송하면, 안드로이드 폰에서는 별다른 앱설치없이 또는 백그라운드앱 실행을 통해서 폰 화면에 터치를 발생시킬 수 있는지(실제 폰 터치없이)가 정확한 질문이라고 할 수 있습니다. ^^
그런데 답변 내용들은 쭉 보면, 이백님의 2번 답변이 조금 가능성 있어 보이는데 정확하진 않은 상황 같군요 ^^;;;;
-
임재항
2012.10.26 17:06
3번 질문과 비슷한 내용의 제품이 보여 링크걸어 드립니다.
http://blog.naver.com/tbg8577?Redirect=Log&logNo=30147891975
맞는지 모르겠네요.
-
Jason
2012.10.26 20:30
감사합니다 ^^ 관련이 있어 보입니다.
-
Jason
2012.10.29 14:29
혹시 오토애니팡에서도 사용하는 모비즌( http://www.mobizen.com/ ) 이라는 프로그램이 관련이 있는걸까요?
.
질문이 좀 이상한가요? ^^;;;
좀 급한 내용이니 답변좀 달아주세요 ^^;;