您好我正在开发一个Android应用程序,它需要通过wifi向PC发送一个字符串,从而模拟键盘按键。任何想法如何才能完成这项任务?
答案 0 :(得分:29)
您必须在PC上编写服务器程序并使用ServerSocket接受连接,并为您的Android手机写一个线程,该线程使用常规套接字(与PC端口相同)然后管理它们使用DataInputStream和DataOutputStream。您还需要在AndroidManifest.xml上打开权限。
对于权限,请使用:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
这里的代码是一个小例子:
服务器:
String msg_received;
ServerSocket socket = new ServerSocket(1755);
Socket clientSocket = socket.accept(); //This is blocking. It will wait.
DataInputStream DIS = new DataInputStream(clientSocket.getInputStream());
msg_received = DIS.readUTF();
clientSocket.close();
socket.close();
客户端:
Socket socket = new Socket("192.168.0.1",1755);
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
DOS.writeUTF("HELLO_WORLD");
socket.close();
答案 1 :(得分:1)
沟通部分相当容易。在PC上打开TCP服务器,在Android设备上安装TCP客户端,发送字符串/命令。 可能会找到一个很好的教程here,但您需要根据需要对其进行修改。
请注意,在使用TCP时,不应该从主线程完成,而是从后台线程完成。一个好的方法是AsyncTask(当你到达那里时)。
另一部分是键盘模拟。为此,您需要使用java.awt.Robot类。
答案 2 :(得分:1)
根据您的Web服务器设计,您可以使用restful communication或soap,然后通过HTTP协议将数据发送到您的Web服务,并从中获得所需的答案。我已经为肥皂方法编写了一个asp web服务,我将在下面解释。
这是soap标准的java示例代码:
private static String NameSpace = "http://tempuri.org/";
//below url must be your service url, mine is a local one
private static String URL = "http://192.168.2.213/hintsservice/service.asmx";
private static String SOAP_ACTION = "http://tempuri.org/";
public static String Invoke(String s) {
//respond string from server
String resTxt = "";
//the name of your web service method
final String webMethName = "Hint";
// Create request
SoapObject request = new SoapObject(NameSpace, webMethName);
// Property which holds input parameters
PropertyInfo PI = new PropertyInfo();
// Set Name
PI.setName("s");
// Set Value
PI.setValue(s);
// Set dataType
PI.setType(String.class);
// Add the property to request object
request.addProperty(PI);
// Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
//Set envelope as dotNet
envelope.dotNet = true;
// Set output SOAP object
envelope.setOutputSoapObject(request);
// Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
// Invoke web servi.ce
androidHttpTransport.call(SOAP_ACTION + webMethName, envelope);
// Get the response
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Assign it to resTxt variable static variable
resTxt = response.toString();
}catch (Exception e) {
//Print error
e.printStackTrace();
//Assign error message to resTxt
resTxt = "Error occured";
}
//Return resTxt to calling object
return resTxt;
}
现在您只需要从适当的活动中调用此方法,然后让您的Web服务完成剩下的工作。 以下是C#语言中的示例Web服务:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {
//Uncomment the following line if using designed components
//InitializeComponent();
[WebMethod]
public string Hint(string s) {
string response = string.Empty;
//todo: produce response
return response;
}
}
}
答案 3 :(得分:0)
我无法为您提供完整的代码,但至少可以指导您朝着正确的方向前进。为此,您需要使用Sockets。现在,如果您在互联网上搜索,您将找到许多与此主题相关的文章和示例,指定Android。例如this和this。
答案 4 :(得分:0)
您可能不得不为PC编写某种程序,作为Android应用程序通过套接字或流发送的“服务器”。