Bonjour, je travaille sur une application Android qui nécessite l'envoi d'une chaîne via un réseau wifi au PC, ce qui simule la frappe au clavier. Vous avez des idées sur la manière de réaliser cette tâche?
Vous devez écrire un programme serveur sur le PC et utiliser ServerSocket pour accepter une connexion et écrire un fil pour votre téléphone Android utilisant un socket standard (avec le même port que le PC), puis les gérer à l'aide de DataInputStream. DataOutputStream. Vous devez également ouvrir des autorisations sur votre AndroidManifest.xml.
Pour les autorisations, utilisez ceci:
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
<uses-permission Android:name="Android.permission.INTERNET" />
Pour le code, voici un petit exemple:
Serveur:
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();
Client:
Socket socket = new Socket("192.168.0.1",1755);
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
DOS.writeUTF("HELLO_WORLD");
socket.close();
La partie communication est plutôt facile. Ouvrez un serveur TCP sur le PC et disposez d'un client TCP sur le périphérique Android lui envoyant des chaînes/commandes. Vous trouverez un tutoriel de Nice ici , mais vous devrez le modifier pour répondre à vos besoins.
Notez que lorsque vous travaillez avec TCP, cela ne doit pas être fait à partir du thread principal, mais à partir d'un thread en arrière-plan. Une bonne méthode pour cela est AsyncTask (Quand vous y arriverez).
L'autre partie est la simulation du clavier. Pour cela, vous devez utiliser le fichier Java.awt.Robot class.
en fonction de la conception de votre serveur Web, vous utilisez soit une communication reposante, soit du savon, puis vous envoyez vos données via le protocole HTTP à votre service Web pour obtenir la réponse souhaitée. J'ai écrit un service Web asp pour approche savon que je vais expliquer ci-dessous.
Voici l'exemple de code Java pour soap standard:
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;
}
maintenant, il vous suffit d'appeler cette méthode à partir de l'activité appropriée et de laisser votre service Web faire le reste. Voici l'exemple de service Web en langage C #:
[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;
}
}
}
Je ne peux pas vous proposer le code complet, mais au moins je peux vous guider dans la bonne direction. Pour ce faire, vous devez utiliser Sockets . Désormais, si vous effectuez une recherche sur Internet, vous trouverez de nombreux articles et exemples relatifs à ce sujet en spécifiant Android. Par exemple this et this .
Vous devrez probablement écrire pour le PC une sorte de programme qui servira de «serveur» à l'application Android à envoyer via un Socket ou un Stream.