2011-08-14 20 views
3

在研究以编程方式读入传入短信的可能性后,我意识到它不可能在标准的iPhone上。对iPhone上的传入短信作出反应

我研究了应有下列行动序列中的应用:

  1. 用户#1具有特定关键字发送短信给用户#2,也许& & XX & &
  2. 用户# 2收到短信和基于关键字的东西应该触发

鉴于无法让手机采取基于短信的keyw ork自动可能在接收到短信时手动触发某些事件,并将我们的短信作为输入。

我的问题是,如果有人有任何想法什么是可能的或/和什么是最简单的方式使用短信作为输入的最佳方法。

回答

4

不,在非越狱手机上,您无法获取有关短信或电话的任何数据。它们完全脱离了您的应用程序。

3

是的,但手动通过用户交互,而不是自动。让你的应用注册一个URL处理程序。然后,如果用户在SMS消息内点击该表单的URL,您的应用将被触发。

4

我很确定它只能在越狱手机上完成。

将此启动plist放入/ System/Library/LaunchDaemons中。只要短信数据库发生变化,它就会触发脚本。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Label</key> 
<string>com.billybob.SMSremote</string> 
<key>ProgramArguments</key> 
<array> 
<string>/usr/sbin/script</string> 
</array> 
<key>Nice</key> 
<integer>20</integer> 
<key>WatchPaths</key> 
<array> 
<string>/private/var/mobile/Library/SMS/sms.db</string> 
</array> 
</dict> 
</plist> 

对于剧本我会使用类似以下内容,以确定是否有包含字符串消息:

sqlite3 /var/mobile/Library/SMS/sms.db "select 'String Found' from message where text like '&&XX&&' order by date desc limit 1" 

整个脚本也许

case $(sqlite3 /var/mobile/Library/SMS/sms.db "select 'String Found' from message where text like '&&XX&&' order by date desc limit 1") in 'String Found') sqlite3 /var/mobile/Library/SMS/sms.db "delete * from message where text like '&&XX&&'" ; commandscript;;esac 

为了当找到字符串时,删除所有包含字符串的消息并执行命令。

当然,你需要从cydia越狱手机和sqlite。同样的过程也可以在其他数据库上完成。我不知道如何在没有shell脚本的情况下执行此操作,但我相信这是可能的。我还没有测试脚本,所以你可能想在尝试之前制作一份sms.db的副本。

+0

欢迎来到SO,这是一篇很好的文章。 :)我建议你看看常见问题:http://stackoverflow.com/faq了解更多关于这个真棒社区! – ForceMagic

0

如果在iPhone中没有读取传入短信的API,那么WhatsApp激活代码在安装时如何工作。仅供参考,在iphone中安装whatsapp时,激活码会发送到您输入的手机号码,然后由whatsapp自动使用以进行注册。所以不知何故,他们读取传入的短信并将其用于注册。如果是这种情况,它是如何完成的?谢谢。