本人项目亲自测试使用,不过收短信,不是即时的,需要不断去读取,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:csq-3@163.com
链接成功后直接输入下面命令即可
通过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里好像是分号。
<?php
$info = json_decode($_POST['info'],true);
$last_line = system('/home/cwh/platform-tools/adb shell am start -a android.intent.action.SENDTO -d sms:'.$info['phoneNum'].' --es sms_body "'.$info['phoneBody'].'" --ez exit_on_sent true;', $retval);
sleep(2);
$last_line1 = system('/home/cwh/platform-tools/adb shell \'input keyevent 22;input keyevent 66;\'', $retval);
sleep(3);
$last_line3 = system('/home/cwh/platform-tools/adb shell \'input keyevent 4;input keyevent 4;input keyevent 4;\'', $retval);
echo "发送成功!";
?>
收短信
1:海信在adb 收发短信确保成功。
2:但adb能执行,PHP调用的话还回遇到很多问题。
3:转换时间需要把后面3个0去掉在转换。
Email:csq-3@163.com
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;“'
即可获取相关短信内容。
<?php
ob_start();
ob_implicit_flush(0);
$last_line = system('/home/cwh/platform-tools/adb shell \'sqlite3 -html /data/data/com.android.providers.telephony/databases/mmssms.db "select * from sms order by _id desc;"\'', $retval);
$contents = ob_get_contents();
ob_end_clean();
if ($contents == '') {
echo "手机里没有短信";
} else {
echo $contents;
}
$this->output();
?>