用 pys60 发短信我只在反编译并分析流氓软件"移动通"的时候碰到过。感觉并不难。
看了一下库参考手册,照着手册的建议为了防止程序挂起几分钟,设定了 sms_send 的回调函数。第一条可以成功发送,第二条的时候就报错出现了" already sending "的提示。即使把第二个 messaging.sms_send 移到第一条的回调函数里也没用。
去 system\Libs\ 里把 messaging.py 翻出来看。它在发送短信的时候把 _sending 置为 True ,调用回调函数之后再调用 signal_lock() 将 _sending 设为 False ,在二者之间调用 messaging.sms_send 总是会出现" already sending "的——这就是在回调函数中发第二条短信也会报错的原因。
不想 hack 到 messaging 内部去改变量,又没打算用 ao_sleep 那么丑的方法,只能另找别的出路。
想起在 PyS60 tutorial 的例子里见过连续发两条短信没问题的。打开 ex_sms_sending.py 一看,人家没用回调函数。再去看库参考手册:"回调函数缺省情况下, sms_send 函数在被调用之后挂起,直到所发信息在队列中删除或发送失败"。
囧囧的删除了回调函数,一切 ok 。
早知灯是火,饭熟已多时……这次绕了大圈圈的教训是本本主义要不得啊~不过算是彻底把这个问题搞明白了,也挺好的。
以前看别人提过今天自己实践了一下的火星心得两则:
一、发中文短信只要把短信正文字符串用 utf-8 解码, sms_sending 第三个参数(可选)文字编码设定为 "UCS2" ,就可以了。
二、从程序发出去的短信在"发出的信息"里看不见,从通讯记录里能看到号码,但看不到内容。
(再次深切的怨念 BB 上不支持 python ……不能自己折腾着玩好痛苦……好想叛逃到 Android 平台啊啊啊~)
没有评论:
发表评论