2

我需要通过编写 MonkeyRunner 脚本来发送彩信。我的脚本如下,它会引发异常。有人可以帮忙吗?我有兴趣使用意图而不是使用坐标方法编写脚本:

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]
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 .解析(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]
在 org.python.core。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]




在 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.爪哇:18 9)

4

1 回答 1

0

有一种方法可以使用设备外壳命令在monkeyrunner脚本中以编程方式发送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 应用程序,其中包含 Intent Extras 中提供的号码/地址、主题和消息。

如果您没有默认 SMS/MMS 消息应用程序并且设备上有多个应用程序,则需要在弹出对话框中选择多个应用程序之一。

您发送短信还是彩信似乎取决于是否包含额外的主题。在我的设备上,如果没有额外主题,则消息是 SMS,如果有额外主题,则消息是 MMS。

以上将仅使用提供的地址和消息以及主题(如果还提供)启动 SMS/MMS 应用程序。但是,它不会发送消息。我总是不得不在发送按钮上添加一个带有 x、y 坐标的触摸来获取要发送的消息。

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

意图有三个附加项,一个地址,一个主题和一个 sms_body。我已经尝试使用monkeyrunner 直接创建意图,而不是am start来自设备外壳的命令,但我从来没有成功地通过这种方法成功地附加到意图中,而上面的代码可以工作。仅当意图不需要额外内容时,其他直接意图创建才对我有用。

如果您需要发送按钮的 x、y 坐标,您可以通过在设备的开发人员选项中打开“指针位置”来为更新的设备获取它们。然后,设备的屏幕将在屏幕顶部有一个非常窄的半透明色带,其中包含有关您的屏幕触摸的信息、标记当前触摸位置的蓝色十字准线以及来自任何触摸动作的蓝色轨迹/轨迹。顶部的功能区指示位置、运动速度和其他数据。对于触摸坐标,启动应用程序并触摸发送按钮所在的屏幕以查找其坐标。

坐标总是相对于当前设备方向的最左上角。这意味着如果您将设备从纵向旋转到横向,则坐标将相对于成为新方向中最左上角的任何角,即使应用程序没有为新方向重新排列自身。

此外,在我的脚本中,我在触摸发送按钮之前使用程序化的 BACK 按钮关闭了软键盘。

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

我发现是否显示软键盘不是很容易预测,因此,在关闭软键盘之前,我在另一个堆栈溢出答案中使用此处显示的方法对它是否显示进行了测试:

如何确定屏幕上是否显示软键盘

享受!

于 2013-10-29T04:31:27.493 回答