- 浏览: 68827 次
- 性别:
- 来自: 杭州
文章分类
最新评论
本文在此基础上做了一些修改:http://blog.csdn.net/wufenglong/article/details/5778862
我主要是要通过在PC端发送命令控制手机作出相应的反应,比如界面的切换,屏幕的滑动。手机和PC通过Socket进行通信,手机作为服务端监听PC端的连接请求,连接成功后接受命令。所以在这里需要两个部分来实现,一个手机端和一个服务端。
1.手机端:在手机需要启动一个Service来监听PC端的Socket的连接请求,这个是不能放在Activity里面,否则程序会“死掉”的。在这里我通过一个Activity来启动Service的:
public class ServerActivity extends Activity { /** Called when the activity is first created. */ Button start, stop; private static final String str = "edu.hdu.server.SERVICE"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); //创建启动service的Intent final Intent intent = new Intent(); //为Intent设置Action属性 intent.setAction(str); start.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { startService(intent);//启动对应的Service } }); stop.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { stopService(intent);//关闭对应的Service } }); } }
下面是Service的实现:它的主要工作是侦听客户端的请求,并启动一个线程IOSocket来处理PC端发来的命令。里面有个Handler是用来处理IOSocket线程发来的消息的,实现屏幕的切换:
public class AndroidService extends Service{ public static Boolean mainThreadFlag = true; public static Boolean ioThreadFlag = true; ServerSocket serverSocket = null; final int SERVER_PORT = 10086; private int currentId = 0; //这个Handler用来处理IOSocket线程发来的消息 Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x1) { if (currentId > 2) { currentId = 0; } if (currentId == 0) { currentId++; Intent intent = new Intent(AndroidService.this,FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else if (currentId == 1) { currentId++; Intent intent = new Intent(AndroidService.this,SecondActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else if (currentId == 2) { currentId++; Intent intent = new Intent(AndroidService.this,ServerActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } } } }; public IBinder onBind(Intent arg0) { return null; } public void onCreate() { System.out.println("Service is created"); super.onCreate(); new Thread() { public void run() { doListen(); }; }.start(); } private void doListen() { serverSocket = null; try { serverSocket = new ServerSocket(SERVER_PORT); boolean mainThreadFlag = true; while (mainThreadFlag) { //侦听有没有来自客户端的连接,没有连接一直阻塞在这里 Socket client = serverSocket.accept(); new Thread(new IOSocket(handler, client)).start(); } }catch(IOException e) { e.printStackTrace(); } } public void onDestory() { super.onDestroy(); //关闭线程 mainThreadFlag = false; ioThreadFlag = false; //关闭服务器 try { serverSocket.close(); }catch (IOException e) { e.printStackTrace(); } } public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); return START_STICKY; } }
类IOSocket用来处理PC端的命令,并根据命令向主线程发送消息:
public class IOSocket implements Runnable{ private Handler handler; private Socket client; public IOSocket(Handler handler, Socket client) { this.handler = handler; this.client = client; } public void run() { //BufferedOutputStream out; BufferedInputStream in; try { //out = new BufferedOutputStream(client.getOutputStream()); in = new BufferedInputStream(client.getInputStream()); //PC端发来的命令 String order = ""; //测试socket AndroidService.ioThreadFlag = true; while (AndroidService.ioThreadFlag) { try { if (!client.isConnected()) { break; } //读取PC发送过来的命令 order = readCMDFromSocket(in); /* 根据命令分别处理数据 */ if (order.equals("switch")) { Message msg = new Message(); msg.what = 0x1; handler.sendMessage(msg); //out.write("OK".getBytes()); //out.flush(); } else if (order.equals("otherOrder")) { //out.write("OK".getBytes()); //out.flush(); } else if (order.equals("exit")) { } }catch (Exception e) { e.printStackTrace(); } } //out.close(); in.close(); }catch(Exception e) { e.printStackTrace(); }finally { try { if (client != null) { client.close(); } }catch(IOException e) { e.printStackTrace(); } } } /* 读取命令 */ public static String readCMDFromSocket(InputStream in) { int MAX_BUFFER_BYTES = 2048; String msg = ""; byte[] tempbuffer = new byte[MAX_BUFFER_BYTES]; try { int numReadedBytes = in.read(tempbuffer, 0, tempbuffer.length); msg = new String(tempbuffer, 0, numReadedBytes, "utf-8"); tempbuffer = null; } catch (Exception e) { e.printStackTrace(); } return msg; } }
PC端的代码比较简单。
发表评论
-
Handler,Message和Looper(转)
2013-04-22 13:52 997一篇关于Handler的文章,写的非常详细,收藏! -
Android UI Pattern中的开源项目
2013-04-22 11:00 01. ListView 1.1 Refreshab ... -
AsyncTask
2013-04-18 20:57 874下面的内容翻译自 ... -
Intent机制
2013-04-16 21:51 0一天突然回过 -
AIDL跨进程调用学习笔记
2013-04-11 10:08 1691该学习笔记根据一个网友的例子整理而成。 ... -
AIDL学习笔记
2013-03-29 15:53 0双方的规划司法官 -
利用适配器构建Android界面布局(layout)
2013-03-22 10:26 777如果你的界面布局的内容是动态的或者不是预先设定的, ... -
如何调用Android系统图库中选择图片(转)
2013-03-06 15:27 1266如何调用Android系统图库中选择图片:点击 ... -
Android中ListView的优化
2012-12-10 10:39 0ListView... -
如何在Android项目中引入第三方JAR包
2012-11-18 14:04 7071.在项目的根目录下建立libs目录,然后将你需要的第三方JA ... -
Android 模拟键盘鼠标事件(Socket+Instrumentation实现)
2012-03-06 15:47 1266通过Socket + Instrumentation实现模 ... -
在Android 工程中的 R.java 文件丢失后 ---如何重新生成
2012-03-07 19:24 813方法:右击你的工程(项目)——>Android Tool ... -
如何在一个Service中启动一个Activity
2012-03-10 11:12 1321Intent intent = new Intent(Serv ... -
Android Toast大全(五种情形)建立属于你自己的Toast
2012-03-13 11:51 627Toast用于向用户显示一些帮助/提示。下面我做了5中效 ... -
Android中如何使用WIFI来连接ADB
2012-04-01 17:00 728有的时候,我们限于种种原因,无法使用USB来连接设备进行调 ... -
Android_Launcher详解
2012-11-15 20:22 0Launcher的定义 -
Android中Activity,View,Window之间的关系
2012-11-15 19:45 31541.首先来看Activity中的attach()方法,在调用o ...
相关推荐
本文档将详细介绍如何通过Socket同步通信技术,实现PC客户端与Android服务端的数据交换。该文档不仅包括了理论知识,还提供了具体的实践案例和技术难点解析。 #### 需求分析 本项目的需求主要包括两个方面: 1. *...
### PC客户端与Android服务端的Socket同步通信 #### 需求分析 在现代移动设备与个人电脑(PC)之间的通信中,实现稳定的双向数据传输变得越来越重要。本篇将详细介绍如何构建一个基于Socket的同步通信系统,其中...
服务器端是基于PC平台的,这通常意味着使用了如Java或C#等编程语言来实现,而客户端则是针对Android设备设计的,所以使用的是Android Studio开发环境和Java或Kotlin编程语言。 **Android客户端** Android客户端...
标题中的“PC客户端与Android服务端的Socket同步通信(USB)demo”指的是一个示例项目,它演示了如何使用Socket编程实现PC(个人计算机)与Android设备通过USB接口进行双向通信。这种通信方式通常用于开发者调试、...
在本场景中,我们将探讨如何利用Socket实现PC服务端与Android手机客户端的互通。 首先,我们需要了解Socket的基本概念。Socket,通常被称为套接字,是网络通信的一种接口,它允许两个应用程序通过网络进行数据交换...
"Android 客户端与 PC 服务器实现 Socket 通信" Android 客户端与 PC 服务器实现 Socket 通信是基于 TCP 协议的网络虚拟链路的建立和维护。该实现过程分为两部分:PC 服务器端和 Android 客户端。 PC 服务器端使用...
在IT领域,尤其是在移动设备和桌面系统的交互中,"PC客户端与Android服务端的Socket同步通信(USB)"是一个重要的技术主题。这个话题涉及到多个关键知识点,包括Android的USB通信、Socket编程以及客户端-服务器架构...
关键点在于它不仅包含Android客户端,还具备服务端和PC客户端,这意味着用户可以通过Android设备进行聊天,并且服务端能够处理来自PC端的输入,实现了跨平台的通信。 【描述分析】 描述提到"此demo为android聊天室...
在IT领域,构建Android客户端与PC服务端程序的交互是常见的任务,这涉及到移动设备与桌面系统的通信,以便实现数据的共享和交换。本项目主要关注Android应用如何连接到PC上的服务端,通过访问数据库(如MySQL和...
PC客户端与Android服务端的Socket同步通信,虽然不到20页的实例讲解,但是非常的经典,不要多分,仅仅1分
本篇将深入探讨一个基于C#的KTV系统,包括服务端、PC客户端以及Android手机端的实现细节,旨在为学习C#和毕业设计的同学提供参考。 一、服务端开发 1. **服务端架构**:通常,服务端采用三层架构,包括表示层(UI)...
本项目提供的"Android客户端与pc服务端程序demo"是一个很好的学习资源,旨在帮助开发者理解如何实现这两者之间的通信。下面将详细介绍这个demo涉及的关键知识点。 1. **Android客户端**: - **HTTP通信**:在这个...
在Android平台上实现基于WiFi的Socket通信,涉及到网络编程的核心概念,包括TCP/IP协议、套接字(Socket)以及客户端(Client)与服务器端(Server)的交互。本篇将详细阐述这些知识点,并以"SocketServer"和"Socket...
本教程主要探讨的是如何利用Java在PC端建立一个服务端,并与Android设备进行蓝牙通信,实现多设备同时连接和数据传输的功能。 首先,我们需要理解蓝牙通信的基本原理。蓝牙是一种短距离无线通信技术,它允许设备...
通过上述分析可以看出,`SocketConnect.java`主要实现了通过Socket在Android客户端与PC服务端之间建立连接的功能。它通过按钮触发连接动作,然后通过输入框获取用户输入的信息,并将这些信息发送到指定的IP地址和...
基于Bluez实现了蓝牙串口通信,用来与手机端,pc端传输数据。蓝牙模块服务多种多样,这个小demo实现了linux下建立蓝牙服务端的demo,并带了一个客户端测试。 使用时,可通过两台设备,分别作为服务端可客户端,连接...
PC客户端通过WebSocket或其他长连接协议与服务端保持实时通信,实现快速响应用户操作。 3. Android手机端应用 随着移动设备的普及,Android手机端应用成为KTV系统的重要补充。开发者通常使用Java或Kotlin语言,...
在Android客户端与PC服务端通信的过程中,通常会采用网络编程技术来实现数据的交互。这里主要涉及到了Socket连接,这是TCP/IP协议栈中用于应用程序之间建立全双工、面向连接的通信方式。以下是对Android客户端连接PC...
在Android开发中,有时我们需要实现Android模拟器与个人计算机(PC)之间的通信,这通常涉及到网络编程中的Socket通信。在本场景中,我们将探讨如何利用Android的Socket API来实现这一功能,具体步骤如下: 首先,...