2013-05-08 7 views
2

MonkeyRunner 스크립트를 작성하여 MMS를 전송해야합니다. 내 스크립트는 아래와 같으며 예외가 발생합니다. 아무도 도와 줄 수 있습니까? 활동을 사용하는 장치 쉘 명령을 사용하여 monkeyrunner 스크립트 프로그래밍 방식의 SMS 또는 MMS를 보낼 수있는 방법이Android에서 MonkeyRunner를 통해 MMS를 보내면 Java 예외가 발생합니다.

from com.android.monkeyrunner import MonkeyDevice, MonkeyRunner, MonkeyImage 
device= MonkeyDevice 
for i in range(5): 
device =MonkeyRunner.waitForConnection(8) 
if device != None: 
print "Device found..." 
break; 
Intent sendIntent = new Intent("android.intent.action.SEND_MSG"); 
sendIntent.putExtra("999999", toText); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "MMS"); 
sendIntent.putExtra("sms_body", textMessage); 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("/sdcard/file.gif"))); 
sendIntent.setType("image/jpeg"); 
device.startActivity(sendIntent); 

130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]Synta xError: ("mismatched input 'sendIntent' expecting NEWLINE", ('C:\Users\halappa\Work\MMBU\EOS2\ES2\Samsung\adt-bundle-windows-x86_64-20130219\adt-bundle -windows-x86_64-20130219\sdk\tools\mms.py', 9, 7, 'Intent sendIntent = new Intent("android.intent.action.SEND_MSG"); \n'))
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at org.python.core.ParserFacade.fixParseError(ParserFacade.java:94)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.ParserFacade.parse(ParserFacade.java:143)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at org.python.core.Py.compile_flags(Py.java:1644)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at org.python.core.builtin.execfile_flags(builtin.java:530)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:156)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
at com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:18 9)

+1

동일한 소스에서 Python과 Java를 섞어 쓰는 것 같습니다. –

+0

예, 원숭이 주자는 본질적으로 Python + Java 즉 Jython.so입니다. 작동한다고 가정 할 수 있습니까? 아무에게도 알려 주실 수 있습니까? 원숭이 주자를 사용하여 MMS 전송을 자동화하는 다른 방법은 없습니까? – Brinda

+0

나는 자이 썬이 무엇을 잘못 이해했다고 생각한다. http://wiki.python.org/jython/JythonFaq/GeneralInfo#What_is_Jython.3F –

답변

0

있다 : 나는 의도를 사용하여 좌표 방법을 사용하지 않는 스크립트 작성에 관심 관리자는 시작에 구축 된 의도와 활동이 의도 엑스트라에 공급되는 번호/주소, 제목 및 메시지와 함께 기본 SMS 또는 MMS 응용 프로그램을 실행합니다

device.shell("am start -a android.intent.action.VIEW -t vnd.android-dir/mms-sms -e address \'number or adderess goes here\' -e subject \'subject goes here\' -e sms_body \'message body goes here\'") 

매개 변수 시작합니다.

기본 SMS/MMS 메시징 응용 프로그램이없고이 장치에 둘 이상의 메시징 응용 프로그램이있는 경우 팝업 대화 상자에서 여러 메시지 중 하나를 선택해야합니다.

SMS 또는 MMS를 보낼지 여부는 추가로 제목이 포함되어 있는지 여부에 따라 달라집니다. 내 장치에서 추가 메시지가없는 경우 메시지는 SMS이고 추가 메시지가있는 경우 MMS입니다.

위 주소는 제공된 주소와 메시지 및 함께 제공되는 SMS/MMS 응용 프로그램을 시작합니다. 그러나 메시지를 보내지 않습니다. 난 항상 보내려는 메시지를 얻기 위해 x, y 좌표로 보내기 버튼에 터치를 추가해야했습니다.

device.touch(x coordinate here, y coordinate here, MonkeyDevice.DOWN_AND_UP) 

인 텐트, 주소, 제목 및 sms_body의 세 가지 항목이 있습니다. 나는 장치 쉘에서 am start 명령이 아닌 직접 의도 작성을 사용하여 monkeyrunner를 사용하려고 시도했지만 위의 코드가 작동하는 반면에 그 접근법을 의도적으로 의도하지는 못했습니다. 다른 직접적인 의도 창조는 의도가 보충을 필요로하지 않을 때만 나를 위해 작동합니다.

송신 버튼의 x, y 좌표가 필요한 경우 기기의 개발자 옵션에서 '포인터 위치'를 켜서 최신 기기를 가져올 수 있습니다. 그러면 장치의 화면에는 화면 위쪽에 매우 좁은 반투명 리본이 표시되며 화면 터치에 대한 정보와 현재 터치 위치를 나타내는 파란색 십자 기호 및 모든 터치 동작에서 파란색 트랙/흔적이 표시됩니다. 상단의 리본은 위치, 동작 속도 및 기타 데이터를 나타냅니다. 터치 좌표의 경우 응용 프로그램을 실행하고 보내기 버튼이있는 좌표를 찾기 위해 화면을 터치합니다.

좌표는 현재 장치 방향의 가장 왼쪽 상단 모서리를 기준으로 항상 있습니다. 즉, 장치를 세로에서 가로로 회전하면 응용 프로그램이 새 방향에 대해 자체를 재배치하지 않더라도 모든 모서리가 새 방향의 맨 위 왼쪽 구석이되는 상대적인 좌표가됩니다.

또한 필자의 스크립트에서는 보내기 단추를 만지기 직전에 프로그래밍 방식 BACK 단추로 소프트 키보드를 닫습니다.

device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP) 

나는 소프트 키보드를 해고하기 전에, 나는 그것이 여기에 표시되는 방법을 사용하여 표시 여부에 대한 테스트를 포함, 소프트 키보드가 표시 여부 매우 예측할 수없는 것을 발견, 그래서 한 다른 스택 오버플로 대답 :

How to Determine Whether Soft Keyboard Is Shown on Screen

즐기십시오!