分享

实现pc端通过usb获取到android手机上的短信、通讯录等信息

 筱肆 2015-01-25

    今天找到了实现原理,其实很简单

   当PC与手机连通时,我们可以通过Socket连接来实现PC与手机间的通信。

   这里我们先讨论手机做为Server端、PC做为Client端的情况。

服务器端(Android手机):

    和其他Java Socket程序一样,只需要定义一个ServerSocket即可实现Server端的监听,如下:

     ServerSocket serverSocket = new ServerSocket(SOCKET_PORT);                 //SOCKET_PORT服务器端端口

     //测试过程中的代码
     int SOCKET_PORT = 6000;     //自己可以修改,一般大于1024即可,但是还有可能与5037等已用端口冲突,最好直接开到6000以上

    ServerSocket serverSocket = null;
    System.out.println("server enter");
    serverSocket = new ServerSocket(SOCKET_PORT);
    Socket socket = serverSocket.accept();

   

客户端(PC端)

       写Java Socket的时候,我们都知道,要连上Server,只需要知道Server的IP地址和Port号就可以了。这里因为手机是和PC相连的,因此麻烦就在于怎么定位这个IP地址和Port号。

    IP地址其实也就是本机地址,而port号则需要有一点点技巧,需要用到adb工具。查看adb帮助中,有一条forward命令可以用于完全任务:

   adb forward <local> <remote> - forward socket connections   

  1.                                forward specs are one of:   
  2.                                  tcp:<port>  
  3.                                  localabstract:<unix domain socket name>  
  4.                                  localreserved:<unix domain socket name>  
  5.                                  localfilesystem:<unix domain socket name>  
  6.                                  dev:<character device name>  
  7.                                  jdwp:<process pid> (remote only)  

使用如下:

    adb forward tcp:Local_Port tcp:Remote_Port

    也即将本地的Local_Port端口,映射为Remote_Port端口,这里的Remote_Port即为上面的SOCKET_PORT。

   所以Client代码可以如下实现:

       String adb_path=....;     

       Runtime.getRuntime().exec(adb_path + " forward tcp:LocalPort tcp:Remote_Port");     

      Socket socket = new Socket("localhost", Local_Port);  

      //测试过程中关键代码

      int Local_Port = 5557;          //一般大于1024即可
      String adb_path="E://wts//adb";  //注意PC端一定要有adb.exe和AdbWinApi.dll AdbWinUsbApi.dll,

                                                    //把上述三个文件放在wts目录下即可(其实看豌豆荚91助手等安装目录下都有上述三个文件)
      //Runtime.getRuntime().exec(adb_path + " forward tcp:LocalPort tcp:Remote_Port");      
      Runtime.getRuntime().exec(adb_path + " forward tcp:5557 tcp:6000"); //5557为Local_Port ,6000服务器端端口,为了方便直接写入,即上述SOCKET_PORT;
      Socket socket = new Socket("localhost", Local_Port); 

     即可实现PC与Android之间的通信。这里注意Android端需要有网络访问的权限:  

          <uses-permission android:name="android.permission.INTERNET" />  

       然后就可以通过Socket实现PC和手机端的通信,通过定义不同的命令来获取不同的数据,例如PC端发送一个命令A(获取所有短信信息),手机端接收到命令A之后,获取手机端数据,然后在通过socket传输到PC端,这样在PC端就可以看到所有短信信息了,我想豌豆荚,91助手应该也都是这样实现的吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多