本人项目亲自测试使用,不过收短信,不是即时的,需要不断去读取,PHP也就只能做到这步了。 下面的手机是天翼定制机,相对麻烦些,如果是HTC,联想等机型,回简单许多。过程中使用了同事的HTC,就非常容易。
发短信
1:首先需要是root帐号登录 如果使用的不是root 需要执行命令的时候都全部提权,是全部。
2:插入手机,开启usb调试,USB设置:选择 天翼宽带连接 (其他手机具体查情况)
3:lsusb 识别出是id 109b 这个为海信 具体可以参阅http://developer.android.com/tools/device.html
4:下载最新的adt,测试的sdk为adt-bundle-linux-x86-20130729.zip,解压出sdk 经测试,只要platform-tools也是可以的,但只有运行sdk中的platform-tools才会生成.android隐藏文件
5:运行 adb ,或者重启adb ,查看root根目录是否存在.android隐藏文件夹 (大公司手机不需要这步) adb kill-server adb start-server adb devices
6:如果存在创建adb_usb.ini,里面追加 0x109b 一行即可。(大公司手机不需要这步)
7:创建 /etc/udev/rules.d/51-android.rules 添加 SUBSYSTEM=="usb", ATTR{idVendor}=="109b", MODE="0666", GROUP="plugdev" 修改权限 chmod a+r /etc/udev/rules.d/51-android.rules 这里的写法和sdk中的adb版本有关系。稍微老点的估计需要SYSFS(idVendor) == "109b"
8:需要卸载天翼手机的一个驱动 eSurfing mass storage USB Device (不是天翼手机不需要这步) 桌面会自动生成一个驱动图标eSurfingClient,点击卸载即可 或者 eject /dev/sr1 这是针对装有一部光驱的电脑,如果你电脑上本来没有光驱,那这里E920的光驱应该是sr0,依次类推。不清除的可以44 eject /dev/sr0,一定要重启adb. 注意需要连续执行2次,第一次删除后,回重新在驱动起,第二次删除后就不会了,具体看dev/sr1或者src2是否还存在 9:进入adb目录
adb kill-server adb start-server adb devices 应该就可以看到设备,说明链接成功。
Email:[email protected]
链接成功后直接输入下面命令即可
通过adb 命令拨打电话 adb shell service call phone 2 s16 "10086"(呼 叫的号码)
通过adb 命令发送短信,需要两步 adb shell am start -a android.intent.action.SENDTO -d sms:10086(发送目的号码) --es sms_body "hello"(短信内容) --ez exit_on_sent true
adb shell input keyevent 22 //失去焦点 adb shell input keyevent 66 // 模拟发送按键
./adb shell am start -a android.intent.action.SENDTO -d sms:13880253762 --es sms_body "hello" --ez exit_on_sent true
群发的话 shell加 sms:13880253762,15928928421即可 逗号,java里好像是分号。
收短信 1:海信在adb 收发短信确保成功。 2:但adb能执行,PHP调用的话还回遇到很多问题。 3:转换时间需要把后面3个0去掉在转换。
Email:[email protected]
1:执行语句语法,执行权限,
在./adb shell su -c 'cd /data/data/com.android.providers.telephony/databases/;ls' 是可以执行的正确的。 但./adb shell su -c 'sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db "select * from sms;"' 是不能执行的, 还算权限的问题,不是进入目录不是没有权限,而是执行sqlite的时候,就不是root了。
所以确保默认adb进入就是root相当的关键 网上4了很多都不行,也就是需要adb进入就是root权限 最后下个adb守护进程 360助手直接可以下载 开启权限即可。
然后./adb shell 'sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db "select * from sms;"' 即可获取相关短信内容。
output();
?>