pc 应用 通过 usb adb 与 android客户端通讯
这回公司要求要实现类似碗豆夹这类的与pc应用进行通讯备份通讯录,短信,应用,并对这些信息进行编辑的功能。
这里主要用到了 adb,socket,pc 应用通过 usb 联接 android 然后通过发送广播来启动 android 里的服务器端程序。
这是采用 c/s 的通讯模式,android 端应用是服务器,pc端的是客户端。pc应用启动android端后通过 tcp 协议进行
通讯。
监听代码 private void doListen() { mServerSocket = null; try { mServerSocket = new ServerSocket(mServerPort); mMainThreadFlag = true; while (mMainThreadFlag) { Socket client = mServerSocket.accept(); // 开启线程处理客户端请求并发送响应 ServerCmdTransfor sCmdHandler = new ServerCmdTransfor(this.mContext, client); mHdList.add(sCmdHandler); new Thread(sCmdHandler).start(); } } catch (IOException e1) { e1.printStackTrace(); } }
/** * 处理客户端请求并发送响应 这些规则都是由产品经理协商好前后端的通讯协议 */ private class ServerCmdTransfor extends TCPServerTransfor implements Runnable { public Handler mNotifyHandler = null; ServerCmdTransfor(Context context, Socket socket) { super(context, socket); } @Override public void run() { Util.log(TAG, Thread.currentThread().getName() + " ServerCmdTransfor start"); CmdData data = null; // 先接收请求 data = readCMD(); Util.log(TAG, Thread.currentThread().getName() + " ServerCmdTransfor readCMD ret " + data); if (data != null) { // 根据cmdId特殊处理 if (data.cmdId == CmdData.COMMAND_SMS_RECEIVE_REQ) { // 手机-->PC端的推送 doNotify(); } else { // 处理 data = TCPServer.this.mCmdHd.processReqCreateResp(data); Util.log(TAG, Thread.currentThread().getName() + " ServerCmdTransfor processReqCreateResp ret " + data); // 然后发送响应 if (data != null) { boolean ret = sendCMD(data); Util.log(TAG, Thread.currentThread().getName() + " ServerCmdTransfor sendCMD ret " + ret); } } } try { mSocket.close(); Util.log(TAG, Thread.currentThread().getName() + " ServerCmdTransfor close"); } catch (IOException e) { e.printStackTrace(); } }
更多的移动互联网的发展趋势、拓者设计吧效果图、移动互联网应用相关的资料请到互联网的一点事:www.yidin.net 留言
android QQ群:222392467
资料:
http://www.yidin.net/discuz/forum.php?mod=viewthread&tid=216&extra=page%3D1
http://www.yidin.net/?p=9725