PHP收发短信

本人项目亲自测试使用,不过收短信,不是即时的,需要不断去读取,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助手直接可以下载 开启权限即可。

app为超级adbd。
在此输入图片描述

然后./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();
   ?>

你可能感兴趣的:(PHP,发短信,收发短信,收短信)