我需要通过编写MonkeyRunner脚本来发送MMS。我的脚本如下所示,它会引发异常。有人可以帮忙吗?我有兴趣使用意图编写脚本而不使用坐标方法:
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]脚本由于异常而终止
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Synta xError :(“不匹配的输入'sendIntent'期待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]
在org.python.core.ParserFacade.fixParseError(ParserFacade.java:94)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] 在org.python.core.ParserFacade.parse(ParserFacade.java:143)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core.Py.compile_flags(Py.java:1644)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.core。内置 .execfile_flags(内置 .java:530)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:156)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77)
130508 12:37:35.663:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]
在com.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:18 9)
答案 0 :(得分:0)
有一种方法可以使用设备shell命令在monkeyrunner脚本中以编程方式发送SMS或MMS,以使用活动管理器启动具有使用start参数构建的intent的活动
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。我尝试使用monkeyrunner直接创建意图而不是来自设备shell的am start
命令,但是我从来没有使用该方法成功加入意图,而上面的代码可行。只有当意图不需要额外的时候,另一个直接意图创建才适用于我。
如果您需要发送按钮的x,y坐标,可以通过打开设备开发人员选项中的“指针位置”来获取更新设备。然后,设备的屏幕将在屏幕顶部显示一条非常窄的半透明色带,其中包含有关屏幕触摸的信息,蓝色十字准线标记当前触摸位置以及任何触摸动作的蓝色轨迹/轨迹。顶部的色带表示位置,运动速度和其他数据。对于触摸坐标,启动应用程序并触摸发送按钮所在的屏幕以查找其坐标。
坐标始终相对于当前设备方向的最左上角。这意味着如果您将设备从纵向旋转到横向,坐标将相对于任何角落成为新方向的最左上角,即使应用程序没有为新方向重新排列。
另外,在我的脚本中,在触摸发送按钮之前,我使用编程后退按钮关闭软键盘。
device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
我发现是否显示软键盘是不可预测的,因此,在解除软键盘之前,我在另一个堆栈溢出答案中包含一个测试是否显示使用此处所示的方法:
How to Determine Whether Soft Keyboard Is Shown on Screen
享受!